文件创建一次,然后停止

本文关键字:然后 一次 文件创建 | 更新日期: 2023-09-27 18:07:16

我正在尝试从文件夹中读取,并从里面删除指定的文件。我能做到这一次没有任何问题。然而,在第一次这样做之后,我不再能够创建新的文件。旧的文件仍然被删除,但是新文件不再被创建。我的问题是;从代码提供的为什么任务工作一次,而不是之后?它会在第一次创建后被删除,但不会重新创建。

编辑:问题出在权限上。我修改了文件夹的安全设置,允许读/写,现在我可以随心所欲了。但是,如果可能的话,我需要它自动设置安全设置,因为其他用户可能不知道如何设置。

if (Directory.Exists(path1))
{
    if (File.Exists(path1 + "''launchinfo.txt"))
    {
        File.Delete(path1 + "''launchinfo.txt");
        using (FileStream fs = File.Create(path1 + "''launchinfo.txt"))
        {
            Byte[] info = new UTF8Encoding(true).GetBytes("[Connection]'n" + Form1.ipaddress + "'nport=0000'nclient_port=0'n[Details]'n" + Form1.playername);
            fs.Write(info, 0, info.Length);
        }
    }
    else
    {
        using (FileStream fs = File.Create(path1 + "''launchinfo.txt"))
        {
            Byte[] info = new UTF8Encoding(true).GetBytes("[Connection]'n" + Form1.ipaddress + "'nport=0000'nclient_port=0'n[Details]'n" + Form1.playername);
            fs.Write(info, 0, info.Length);
        }
    }
}

文件创建一次,然后停止

您还没有发布任何可能遇到的异常-如果您有异常,请发布。

也就是说,当你试图删除文件时,你可能会遇到File in use by another process -特别是如果你在创建文件后调用你的函数。

解决这个问题的一个方法是在删除文件之前检查是否有进程正在使用该文件。
string fullPath = Path.Combine(path1, "launchinfo.txt");
if (Directory.Exists(path1))
 {
      if (File.Exists(fullPath))
      {  
         // Call a method to check if the file is in use.         
         if (IsFileLocked(new FileInfo(fullPath)){
            // do something else because you can't delete the file
         } else {
             File.Delete(fullPath);
          }
      }
      using (FileStream fs = File.Create(fullPath))
      {
         Byte[] info = new UTF8Encoding(true).GetBytes("[Connection]'n" + Form1.ipaddress + "'nport=0000'nclient_port=0'n[Details]'n" + Form1.playername);
         fs.Write(info, 0, info.Length);
       }
 }

检查文件是否正在被另一个进程使用的方法

 protected virtual bool IsFileLocked(FileInfo file)
    {
        FileStream stream = null;
        try
        {
            stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
        }
        catch (IOException)
        {
            return true;
        }
        finally
        {
            if (stream != null)
                stream.Close();
        }    
        //file is not locked
        return false;
    }