У меня возникла ситуация, когда мне нужно получить доступ к сетевому диску на С#, но буквы дисков могут быть разными на каждой машине, на которой будет работать мое приложение.
Например: на моем компьютере для разработки буква сетевого диска выглядит так: 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:, но чтение с сетевого диска оказалось сложнее, чем я думал! Что я делаю не так? Заранее спасибо!
M:\engineering\testerdata\configfile.txt
относится к папкеengineering
под тем, на что сопоставляетсяM:
. В вашем примере универсального соглашения об именах (UNC)\\engineering\testerdata\configfile.txt
я думаю, что он ищет хост с именем engineering, которого, как я полагаю, не существует. Что именно соответствуетM:
? Вы должны иметь возможность просто использовать UNC, а не не подключенные диски - это обходитM:
иG:
- person MickyD   schedule 21.02.2015M:
иG:
представляют сеть сопоставленную б> диски? Просто используйте UNC. не вижу в чем проблема к сожалению - person MickyD   schedule 21.02.2015File.Exists
, действительно не существует? Просто попробуйте открыть путь UNC, который вы передаетеFile.Exists
, в окне проводника Windows и посмотрите, найдено что-то или нет. - person stakx - no longer contributing   schedule 21.02.2015