Простой доступ к сетевому диску в 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

Другие вопросы по тегам