2015-02-21 6 views
0

У меня есть ситуация, когда мне нужно получить доступ к сетевому диску на 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:, но чтение с сетевого диска оказалось сложнее, чем я думал! Что я делаю не так? Заранее спасибо!

+2

Ну 'M: \ техники \ testerdata \ configfile.txt' относится к' engineering' папке под какие-либо 'M:' сопоставляется , В примере универсальной именованной конвенции (UNC) «\\ engineering \ testerdata \ configfile.txt» я бы подумал, что он ищет хост под названием ** engineering **, который, как я думаю, не существует. Что такое «M:»? Вы должны иметь возможность просто использовать UNC, а не не привязанные к карте диски, которые обходят буквы 'M:' и 'G:' – MickyD

+0

M: и G: представляют буквы дисков на разных машинах. Я пытаюсь обойтись с помощью букв дисков, так как я не знаю, что это такое. Данные, которые я пытаюсь найти, находятся в папке \\ engineering \ testerdata. – MTH

+3

Хм, я смущен - _ «На моем компьютере разработки письмо с сетевым диском выглядит так: M: \ engineering \ testerdata \ configfile.txt" _ - Не 'M:' и 'G:' представляют сеть ** отображенных ** дисков? Просто используйте UNC. Я не вижу, что проблема печально – MickyD

ответ

1

Посмотрите на отображение и использовать канонический файл (я думаю, что это называется так) имя вместо Например я диск отображается в I, но это на самом деле

\\DC1\applications\ 

обычно я бы адресовать это через I: \ Вы можете получить эту информацию от исследователя, это действительно показывает в моем случае, I: \ действительно \ DC1 ​​\ Приложение

это означало бы, что если есть такая вещь, как я : \ engineering вы бы рассматривали его как \ DC1 ​​\ applications \ engineering

Чтобы просмотреть отображение, щелкните правой кнопкой мыши кнопку «Пуск» и выберите «открыть проводник Windows». Отображение отображается слева под узлом компьютера. Предполагая, что вы уже имеете эти сопоставления.

enter image description here

Смотрите в этом примере привод Y отображается на

\\Storage\public 

Привод С представляет собой локальный диск, так D, Е представляет собой DVD, F также привод,. ..

+1

Несмотря на прекрасный ответ, подумайте о том, чтобы приспособить свой пример к набору пути OP (ну, в любом случае, часть после имени хоста) :) – MickyD

+0

Принял ваш совет и немного изменил свой ответ. Полезный комментарий. –

+0

Полный путь на моей машине: M: \\ GVR-ARRAY02 \ engineering \ testerdata \ configfile.txt. Когда я его кодирую как таковой, он все равно не находит файл в сети. Я не уверен, почему у меня такое сложное время. – MTH

2

Вы хотите использовать UNC пути: \\fqdn\sharename\PathToFile

Смежные вопросы