У меня есть ситуация, когда мне нужно получить доступ к сетевому диску на C#, но буквы дисков могут отличаться на каждой машине, на которой будет работать мое приложение.Простой доступ к сетевому диску в C#
Например: На моем компьютере развития, буква сетевого диска выглядит следующим образом M: \ инженерии \ testerdata \ configfile.txt
Но на стенде машин испытаний производства, буква диска могут отличаться на каждой машине в зависимости от того, как настроен наш ИТ-отдел. В этих случаях, возможно, некоторые машины с G: \ техники \ testerdata \ configfile.txt и другие с L: \ техники \ 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"; Которая даже не компилируется, я получаю сообщение «Unrecognized escape sequence».
Я думал, что это будет легко реализовать, учитывая, что я сделал что-то очень похожее для чтения локального файла на диске C:, но чтение с сетевого диска оказалось сложнее, чем я думал! Что я делаю не так? Заранее спасибо!
Ну 'M: \ техники \ testerdata \ configfile.txt' относится к' engineering' папке под какие-либо 'M:' сопоставляется , В примере универсальной именованной конвенции (UNC) «\\ engineering \ testerdata \ configfile.txt» я бы подумал, что он ищет хост под названием ** engineering **, который, как я думаю, не существует. Что такое «M:»? Вы должны иметь возможность просто использовать UNC, а не не привязанные к карте диски, которые обходят буквы 'M:' и 'G:' – MickyD
M: и G: представляют буквы дисков на разных машинах. Я пытаюсь обойтись с помощью букв дисков, так как я не знаю, что это такое. Данные, которые я пытаюсь найти, находятся в папке \\ engineering \ testerdata. – MTH
Хм, я смущен - _ «На моем компьютере разработки письмо с сетевым диском выглядит так: M: \ engineering \ testerdata \ configfile.txt" _ - Не 'M:' и 'G:' представляют сеть ** отображенных ** дисков? Просто используйте UNC. Я не вижу, что проблема печально – MickyD