【问题标题】:Check if a file is accessable on a shared network drive检查共享网络驱动器上的文件是否可访问
【发布时间】:2011-04-21 19:35:40
【问题描述】:

我有一个程序可以做不同的事情我的问题与访问网络映射驱动器或共享文件夹中的文件有关

程序可以从网络(网络映射驱动器或共享文件夹)运行文件 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;
}

谢谢

【问题讨论】:

标签: c# file networking file-io


【解决方案1】:

当然,最好的办法是创建设置的本地缓存。您不能信任网络连接。它们在操作过程中可能会减慢或损坏。如果一切都从网络运行,我会说,这绝对不是一个安全的想法。

但就技术问题而言,文件存在应该没问题。已经讨论了一个更具描述性的想法来检查文件的存在。 Read here.

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

【讨论】:

  • 好吧,缓存文件意味着您必须将执行期间需要的文件复制到本地临时文件夹。如果您有一个提供复制到本地临时文件夹功能的框架,请使用它。如果没有,请创建一个临时文件夹,并将文件从网络位置一一复制到此文件夹,保持原始文件夹结构。然后使用这些本地文件。使用结束后,删除您创建的本地临时文件夹(除非您有其他用途)。阅读本文以了解复制 - msdn.microsoft.com/en-us/library/cc148994.aspx
【解决方案2】:

File.Exists() 应该没问题,但是如果您启动大型复制操作,如果在该过程中连接中断,您将无能为力,因此您需要确保为此编写代码。

您应该捕获IOException 并按照您认为合适的方式处理它。

编辑:捕获 IOException 的代码:

try
{
   File.Copy(myLocalFile, myNetworkFile);
}
catch (IOException ioEx)
{
   Debug.Write(myLocalFile + " failed to copy!  Try again or copy later?");
}

【讨论】:

  • 文件很小,但你能给我举个例子来说明如何捕获 IOException 吗?
【解决方案3】:

不要。只需尝试操作。它会以同样快的速度失败,并且您不会引入时间窗口问题。无论如何,你必须应对这种失败,为什么要编码两次?

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多