C # Почему мой код выбрасывает io.system.directory notfound? - PullRequest
0 голосов
/ 23 марта 2009

Почему код ниже генерирует исключение io.system.directory notfound? Я не могу воссоздать проблему сам, но другой пользователь моего кода видит это, есть идеи почему? Спасибо

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 ]

3 голосов
/ 23 марта 2009

Вы пытались использовать System.IO.Directory.Exists вместо System.IO.File.Exists при проверке наличия пути?

1 голос
/ 23 марта 2009

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

"Замечания

Метод Exists не должен использоваться для проверки пути, он просто проверяет, существует ли файл, указанный в path Передача неверного пути в Existsl возвращает false. «

Это ваша ошибка прямо здесь. Ваша проверка не гарантирует, что путь к файлу существует

1 голос
/ 23 марта 2009

Убедитесь, что каталог существует, а не файл ...

Хотя вы проверяете и создаете его, если он не существует. Вы не знаете, есть ли у них привилегии для создания каталога. Таким образом, ваш вызов Directory.CreateDirectory также может быть неудачным, и затем весь остальной код завершится ошибкой

1 голос
/ 23 марта 2009

Вы проверяете наличие каталога, используя System.IO.File вместо System.IO.Directory. Вероятно, он работает на вашем компьютере, потому что этот каталог уже существует, и поэтому проверка не имеет значения.

В любом случае, вы должны помнить, что файловая система является нестабильной. Вместо проверки существования попробуйте открыть ресурс и обработать исключение в случае его сбоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...