Проверьте, доступен ли файл на общем сетевом диске - PullRequest
3 голосов
/ 06 октября 2010

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

программа может запустить файл msi / exe из сети (сетевой подключенный диск илиобщая папка) программа может копировать файл из сети (сетевой подключенный диск или общая папка)

как я могу проверить, доступны ли файлы, прежде чем я попытаюсь запустить или скопировать (в случае отключения сети)или любая другая проблема с сетью)?

Достаточно ли с File.Exists();

вот пример моего кода:

public static bool FileIsOk(string path)
{
   try
   {
      FileInfo finfo = new FileInfo(path);

      if (finfo.Exists)
      {
         return true;
      }
      MessageBox.Show("file does not exist, or there is a problem with the network preventing access to the file!");
      return false;
   }

   catch (Exception e)
   {
      MessageBox.Show(e.Message);
   }
   return false;
}

спасибо

Ответы [ 3 ]

5 голосов
/ 06 октября 2010

File.Exists () должен быть в порядке, но если вы начнете операцию большого копирования, вы ничего не сможете сделать, если соединение разорвется во время этого процесса, так что вам нужно убедиться, что вы его кодируете.

Вы должны перехватить IOException и обрабатывать его так, как считаете нужным.

РЕДАКТИРОВАТЬ : код для захвата IOException:

try
{
   File.Copy(myLocalFile, myNetworkFile);
}
catch (IOException ioEx)
{
   Debug.Write(myLocalFile + " failed to copy!  Try again or copy later?");
}
3 голосов
/ 10 октября 2010

Не.Просто попробуйте операцию.Он так же быстро потерпит неудачу, и вы не будете представлять проблему окна синхронизации.Вы все равно должны справиться с этой ошибкой, зачем кодировать ее дважды?

1 голос
/ 06 октября 2010

Лучшей идеей, конечно, было бы создание локального кэша установки.Вы не можете доверять сетевым подключениям.Они могут замедлиться или сломаться во время работы.Если бы все запускалось из сети, я бы сказал, что это определенно не безопасная идея.

Но что касается технического вопроса, File Exists должен быть в порядке.Гораздо более описательная идея уже обсуждалась, чтобы проверить существование файла. Читайте здесь .

FileInfo fi = new FileInfo(@"\\server\share\file.txt");
bool exists = fi.Exists;
...