应用程序提示网络驱动器不存在,但在使用打开文件对话框时却找到了。

12
我创建了一个小应用程序,在Win7-PC上运行。它的作用是在早上1点钟检查网络驱动器的内容(并将其与本地硬盘上的文件夹进行比较),如果有差异,则将差异复制到此文件夹中。
问题是,有时它找不到网络驱动器。
当应用程序启动时,使用应用程序上的按钮找到网络驱动器,该按钮启动OpenFileDialog,并将结果驱动器号放入按钮旁边的文本框中。从那时起,应该可以自行运行。计算机从不关闭。
当它说找不到网络驱动器时,我可以手动按下同一应用程序上的按钮,在 OpenFileDialog 中选择驱动器(驱动器号永远不会更改),然后应用程序会连续几天无故障运行。然后问题再次发生。
问题是:为什么我的应用程序可以通过OpenFileDialog访问网络驱动器,但我的应用程序却不能?
我的应用程序使用此函数开始复制过程(使用“Y:\”调用此函数)来确定驱动器是否存在:
    public bool fn_drive_exists(string par_string)
    {
        DirectoryInfo di_dir = new DirectoryInfo(par_string);
        if (di_dir.Exists)
        {
            return true;
        }

        return false;
    }

有时候我的应用会返回False,直到我使用OpenFileDialog "唤醒"它。

那么OpenFileDialog有什么功能是我的应用没有的呢?


3
你考虑使用\\server\sharedFolder来替代映射的网络驱动器Y:,这样行吗?会有相同的问题吗? - Harvey Kwok
另外,尝试在fn_drive_exists周围放置一些重试逻辑(例如每个循环延迟6秒,总共循环5次)。 - Eric J.
1
看起来 UNC 路径在你的情况下可行。请参阅此 SO 帖子 - Harvey Kwok
@Harvey:我应该怎么做? 我相信我应该写其他东西,而不是“Server”和“sharedfolder”?一个IP地址? - Mads Aggerholm
@Eric:谢谢你的建议。我试过了,但那并没有解决问题。 - Mads Aggerholm
显示剩余3条评论
5个回答

1
根据这个SO post,如果您使用UNC路径而不是映射的网络驱动器,则问题应该消失了。

0

就像Harvey所说的那样,使用UNC路径来访问文件夹,例如\\server\sharedfolder。在\\server的位置上使用服务器的名称。你的电脑有一个名称,服务器也有一个名称。如果你知道IP地址,也可以使用它。将\sharedfolder替换为文件的路径。以下是一些示例:

\\AppsServer\c$\Program Files(x86)

\\FileServer1\d$\Users\John\My Documents

c$表示C驱动器是共享文件夹。如果整个驱动器没有共享,你需要共享特定的文件夹。你可以通过登录服务器,右键单击文件夹,然后选择属性来完成。然后你进入共享选项卡并勾选“共享此文件夹”复选框。如果你的共享文件夹名为MyShare,则访问该文件夹的UNC路径将为

\\server\MyShare


0
如果您的目的地具有静态 IP 地址,建议使用该 IP 地址而不是域名来访问网络驱动器。

0

这篇Stack Overflow文章描述了与您所描述的类似的情况。

作为对那个问题的回答之一,发布的链接之一引导我到这篇MSDN文章,其中提供了许多可能会在尝试使用映射的驱动器字母访问共享网络驱动器时遇到错误的原因。

微软的建议(见下文)是简单地使用UNC路径。

必须访问远程资源的服务(或任何以不同安全上下文运行的进程)应使用通用命名约定(UNC)名称来访问该资源。

更具体地回答您实际的问题,关于为什么突然无法访问网络共享,我猜测是由于Windows由于空闲超时而断开了网络共享,如KB297684中所讨论的。任何尝试访问已断开连接的驱动器的操作都将遇到短暂的等待,因为重新建立与网络共享的连接,这可能是导致您问题的原因。

为了测试这个理论,可以尝试在网络驱动器上每隔相对较短的时间(比如每10分钟)写入一些数据,以此来“说服”Windows该驱动器仍然处于活动状态。

0

您也可以尝试使用:

System.IO.Directory.Exists(par_string);

不必自己编写同样的方法。我期望框架方法能够“唤醒”网络驱动器。 注意:此方法也适用于UNC路径(类似于\\<服务器名称或IP地址>\<共享文件夹>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接