C#为什么我的代码抛出io.system.directorynotfound?

时间:2009-03-23 13:50:03

标签: c# directory

为什么下面的代码会抛出io.system.directorynotfound异常?我不能自己重新创建问题,但我的代码的另一个用户确实看到了它,任何想法为什么? 感谢

try
{
  //create path
  string strAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString() + "\\MyApp\\Data\\logs";
  //check path exists
  if (!System.IO.File.Exists(strAppData))
  {
      System.IO.Directory.CreateDirectory(strAppData);
  }
  System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(strAppData);
  int count = dir.GetFiles().Length;

  if (count > 100)
  {
      string[] files = System.IO.Directory.GetFiles(strAppData);

      foreach (string file in files)
      {
          System.IO.File.Delete(file);
      }
  }


  this.fileName = fileName;
  // delete the file if it exists
  if (File.Exists(fileName))
  {
      //delete the file
      File.Delete(fileName);
  }

      // write the data to the file
      fs = File.OpenWrite(fileName);
      sWriter = new StreamWriter(fs);

      sWriter.WriteLine(headerText);

      sWriter.Flush();
      sWriter.Close();
}
catch (Exception exp)
{
    throw new Exception(exp.Message);
}

4 个答案:

答案 0 :(得分:3)

在检查路径是否存在时,您是否尝试过使用System.IO.Directory.Exists而不是System.IO.File.Exists?

答案 1 :(得分:1)

您正在使用System.IO.File而非System.IO.Directory检查目录是否存在。它可能适用于您的计算机,因为该目录已经存在,因此检查无关紧要。

无论哪种方式,您都需要记住文件系统是易失性的。而不是检查是否存在,尝试打开资源并在失败时处理异常。

答案 2 :(得分:1)

检查目录是否存在,而不是文件......

虽然您正在检查它,但如果它不存在则创建它。你不知道他们是否有创建目录的privelages。因此,您的Directory.CreateDirectory调用可能也会失败,然后其余代码将失败

答案 3 :(得分:1)

http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx

“备注

Exists方法不应用于路径验证,此方法仅检查路径中指定的文件是否存在。将无效路径传递给Existsl将返回false。 “

那是你的错误。您的验证不能确保文件的路径存在