文件创建一次,然后停止

时间:2016-09-15 12:28:13

标签: c# winforms visual-studio

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

编辑: 问题在于权限。 我更改了文件夹安全设置以允许读/写,我现在可以按照我的意愿去做。 但是,如果可能,我需要它自动设置安全设置,因为其他用户可能不知道如何操作。

{{1}}

1 个答案:

答案 0 :(得分:2)

您没有发布任何可能遇到的例外情况 - 如果您有例外,请发布。

话虽如此,在尝试删除文件时,您可能会遇到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;
    }