为什么下面的代码会抛出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);
}
答案 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。 “
那是你的错误。您的验证不能确保文件的路径存在