Простой доступ к сетевому диску в C#
У меня есть ситуация, когда мне нужно получить доступ к сетевому диску в C#, но буквы дисков могут быть разными на каждой машине, где будет работать мое приложение.
Например: на моем ПК для разработки буква сетевого диска выглядит так : M:\engineering\testerdata\configfile.txt
Но на компьютерах с испытательным стендом буква диска может быть разной на каждой машине в зависимости от того, как их установил наш ИТ-отдел. В этих случаях могут быть некоторые машины с G:\engineering\testerdata\configfile.txt и другие с L: \ engineering \ testerdata \ configfile.txt. В любом случае данные будут находиться на сетевом диске в папке \engineering\testerdata\configfile.txt.
Я пытаюсь написать метод доступа к этой сетевой папке для чтения файла конфигурации. Мне не нужно беспокоиться об учетных данных, потому что они уже настроены на каждой машине. Кроме того, я не хочу, чтобы это был локальный рабочий каталог, так как мне пришлось бы вручную изменять настройки примерно на 20 ПК. Вот как выглядит мой метод.
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
Я всегда получаю исключение "Необработанное исключение типа" System.IO.IOException "произошло в mscorlib.dll
Дополнительная информация: имя сети не найдено ".
Для строки DatabasetoUsePath я также попытался @"\\engineering\testerdata\configfile.txt"; И "\engineering\testerdata\configfile.txt"; Что даже не скомпилируется, я получаю сообщение "Нераспознанная escape-последовательность".
Я подумал, что это будет легко реализовать, учитывая, что я сделал нечто очень похожее для чтения локального файла на диске C:, но чтение с сетевого диска оказалось сложнее, чем я думал! Что я делаю неправильно? Заранее спасибо!
2 ответа
Взгляните на сопоставление и используйте вместо этого каноническое имя файла (я думаю, что оно так называется). Например, у меня есть сопоставленный мне диск, но это действительно так.
\\DC1\applications\
обычно я обращаюсь к этому через I:\ Вы можете получить эту информацию из проводника, в моем случае это действительно показывает, что я: \ is is \DC1 \ Applications
Это означало бы, что если есть такая вещь, как I:\engineering, вы бы назвали ее \DC1 \ Applications \ engineering
Для просмотра сопоставления щелкните правой кнопкой мыши кнопку "Пуск" и выберите "Открыть проводник Windows". Отображение отображается слева под узлом компьютера. Предполагая, что у вас уже есть эти сопоставления.
Посмотрите в этом примере диск Y сопоставлен с
\\Storage\public
Диск C - это локальный диск, так же как и D, E - это DVD, F - тоже диск, ...
Вы захотите использовать UNC-пути: \\fqdn\sharename\PathToFile