12

我制作了一个在 Win7-PC 上运行的小应用程序。它所做的只是在凌晨 1:00 检查网络驱动器的内容(并将其与本地硬盘驱动器上的文件夹进行比较),如果有差异,请将差异复制到该文件夹.

问题是,有时它找不到网络驱动器。

当应用程序启动时,使用应用程序上启动 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 有什么作用,而我的应用程序没有?

4

5 回答 5

1

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

于 2012-07-07T19:34:15.737 回答
0

您也可以尝试使用:

System.IO.Directory.Exists(par_string);

而不是为同一件事编写自己的方法。我希望框架方法能够“唤醒”网络驱动器。注意:方法也适用于 UNC 路径(类似于\\<server name or IP address>\<shared folder>

于 2012-08-15T20:35:15.140 回答
0

正如 Harvey 所说,使用 UNC 路径访问文件夹,例如 \\server\sharedfolder。代替 \\server 使用服务器的名称。您的计算机有一个名称,服务器也有一个名称。如果您知道 IP 地址,也可以使用它。您将 \sharedfolder 替换为文件的路径。一些例子:

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

\\FileServer1\d$\Users\John\我的文档

c$代表C盘是共享文件夹。如果未共享整个驱动器,则需要共享特定文件夹。您可以通过登录服务器、右键单击文件夹并选择“属性”来执行此操作。然后您转到“共享”选项卡并选中“共享此文件夹”复选框。如果您的共享文件夹名为 MyShare,那么您访问该文件夹的 UNC 路径将为

\\服务器\我的共享

于 2012-09-15T00:28:11.737 回答
0

如果您的目的地有一个静态 IP 地址,我建议您使用该 IP 地址而不是网络驱动器的域名

于 2012-07-23T03:51:09.140 回答
0

这篇 SO 帖子描述了与您所描述的类似的场景。

作为对该问题的回应而发布的链接之一将我带到了这篇 MSDN 文章,该文章提供了多种原因,说明为什么在尝试使用映射驱动器号访问共享网络驱动器时可能会遇到错误。

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

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

为了更具体地回答您的实际问题,关于为什么它突然无法访问网络共享,我冒昧地说网络共享由于空闲超时而被 Windows 断开连接,如KB297684中所述。随着与网络共享的连接重新建立,任何访问断开连接的驱动器的尝试都会遇到一小段等待,这可能是导致您的问题的原因。

为了验证这个理论,尝试以相对较短的时间间隔(也许每 10 分钟一次?)将一些数据写入网络驱动器上的文件,以尝试Windows 相信驱动器仍然处于活动状态。

于 2012-08-11T06:01:33.193 回答