【问题标题】:Simple access to network drive in C#在 C# 中简单访问网络驱动器
【发布时间】:2015-04-23 08:27:13
【问题描述】:

我有一种情况,我需要使用 C# 访问网络驱动器,但驱动器号在运行我的应用程序的每台机器上可能不同。

例如: 在我的开发 PC 上,网络驱动器号如下所示 M:\engineering\testerdata\configfile.txt

但在生产测试台机器上,每台机器上的驱动器号可能会有所不同,具体取决于我们的 IT 部门如何设置它们。在这些情况下,可能有些机器带有 G:\engineering\testerdata\configfile.txt,而其他机器带有 L:\engineering\testerdata\configfile .txt。无论如何,数据将位于文件夹 \engineering\testerdata\configfile.txt 下的网络驱动器上。

我正在尝试编写一个方法来访问此网络文件夹以读取配置文件。我不必担心凭据,因为它们已经在每台机器上设置。此外,我不想将其设为本地工作目录,因为我必须手动更改大约 20 台 PC 上的设置。这是我的方法的样子。

public string DatabaseSelector()
    {
      //This method determines which database to use when reading     configuration data.  If the file does not exist, default to AX.
        string DataBaseToUse = "AX";  //This is the default database
        string DatabasetoUsePath = "\\\\engineering\\testerdata\\configfile.txt";
        StreamReader DBtoUseReader = new StreamReader(DatabasetoUsePath);

        if (File.Exists(DatabasetoUsePath))  // if file exists, read file to determine which database to use.
        {
            DataBaseToUse = DBtoUseReader.ReadToEnd();   // Set to what's in the file.  Will be AX or MACPAC
            if (DataBaseToUse == "MACPAC")  
                return DataBaseToUse;  //Done - using MACPAC
            else
                return "AX";  // regardless of anything else, use AX
        }
       return DataBaseToUse;  // if file doesn't exist, us AX.
    }  // end DatabaseSelector

我总是得到一个异常“在 mscorlib.dll 中发生了“System.IO.IOException”类型的未处理异常
附加信息:找不到网络名称。”

对于字符串 DatabasetoUsePath 我也试过 @"\\engineering\testerdata\configfile.txt";"\engineering\testerdata\configfile.txt"; 这甚至无法编译,我收到消息“无法识别的转义序列”。

考虑到我在 C: 驱动器上读取本地文件时做了非常相似的操作,我认为这很容易实现,但是从网络驱动器读取结果比我想象的要困难!我究竟做错了什么?提前致谢!

【问题讨论】:

  • 好吧,M:\engineering\testerdata\configfile.txt 指的是 engineering 文件夹下的任何 M: 映射到的文件夹。在 \\engineering\testerdata\configfile.txt 的通用命名约定 (UNC) 示例中,我认为它正在寻找一个名为 engineering 的主机,我猜它不存在。 M: 到底映射到什么?您应该能够只使用 UNC 而非未映射的驱动器 - 绕过 M:G:
  • M: 和 G: 代表不同机器上的盘符。我正在尝试使用驱动器号,因为我不知道它们是什么。我试图获取的数据位于 \\engineering\testerdata 文件夹中。
  • 嗯我很困惑 - “在我的开发 PC 上,网络驱动器号看起来像这样 M:\engineering\testerdata\configfile.txt” - 不要@ 987654329@ 和 G: 代表网络映射驱动器?只需使用 UNC。可悲的是我不明白问题出在哪里
  • 好的。我想我需要阅读并理解 UNC 的含义。这是我第一次听说它。谢谢。
  • 为什么这个标签是 ibm-midrange?

标签: c# sql disk network-share


【解决方案1】:

您需要使用 UNC 路径:\\fqdn\sharename\PathToFile

【讨论】:

    【解决方案2】:

    查看映射并改用规范文件(我认为它是这样称呼的)名称 例如我有一个驱动器映射到我,但它确实是

    \\DC1\applications\
    

    通常我会通过 I:\ 您可以从资源管理器中获取此信息,在我的情况下它确实表明 I:\ 真的是 \DC1\applications

    这意味着如果有 I:\engineering 这样的东西,您将把它称为 \DC1\applications\engineering

    要查看映射,请右键单击开始按钮并单击打开 Windows 资源管理器。映射显示在左侧计算机节点下。假设您已经拥有这些映射。

    在这个例子中看到 Y 驱动器被映射到

    \\Storage\public
    

    C盘是本地盘,D盘也是,E盘是DVD,F盘也是盘,...

    【讨论】:

    • 虽然是一个很好的答案,但请考虑调整您的示例以适应 OP 的路径(以及主机名之后的部分):)
    • 考虑了您的建议并稍微修改了我的答案。有用的评论。
    • 我机器上的完整路径是M:\\GVR-ARRAY02\engineering\testerdata\configfile.txt。当我这样编码时,它仍然无法在网络上找到该文件。我不知道为什么我会遇到这样的困难。
    • 问题是M:\是什么,右击开始按钮,点击windows explorer,打开计算机节点,看看下面出现了什么。 unc 应该会出现。
    • 更新了我的答案,以查看资源管理器在我的具有网络驱动器的电脑上提供的内容。
    猜你喜欢
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多