在C#中简单访问网络驱动器
Simple access to network drive in C#
我遇到这样一种情况,我需要在 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: 驱动器上的本地文件做了非常相似的事情,我认为这很容易实现,但是从网络驱动器读取比我想象的要困难!我究竟做错了什么?提前致谢!
查看映射并使用规范文件(我认为它是这样称呼的)名称
例如我有一个映射到我的驱动器,但它确实是
\DC1\applications\
通常我会通过 I:\
您可以从资源管理器中获取此信息,在我的案例中它确实表明
我:\真的是\DC1\applications
这意味着如果有像 I:\engineering 这样的东西,你会把它写成 \DC1\applications\engineering
要查看映射,请右键单击开始按钮,然后单击打开 windows 资源管理器。映射显示在计算机节点下的左侧。假设您已经有了这些映射。
在此示例中,Y 驱动器映射到
\Storage\public
C盘是本地盘,D也是,E是DVD,F也是盘,...
您需要使用 UNC 路径:\fqdn\sharename\PathToFile
我遇到这样一种情况,我需要在 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: 驱动器上的本地文件做了非常相似的事情,我认为这很容易实现,但是从网络驱动器读取比我想象的要困难!我究竟做错了什么?提前致谢!
查看映射并使用规范文件(我认为它是这样称呼的)名称 例如我有一个映射到我的驱动器,但它确实是
\DC1\applications\
通常我会通过 I:\ 您可以从资源管理器中获取此信息,在我的案例中它确实表明 我:\真的是\DC1\applications
这意味着如果有像 I:\engineering 这样的东西,你会把它写成 \DC1\applications\engineering
要查看映射,请右键单击开始按钮,然后单击打开 windows 资源管理器。映射显示在计算机节点下的左侧。假设您已经有了这些映射。
在此示例中,Y 驱动器映射到
\Storage\public
C盘是本地盘,D也是,E是DVD,F也是盘,...
您需要使用 UNC 路径:\fqdn\sharename\PathToFile