Проблема с открытием сетевой папки

173
06 марта 2018, 01:13

Добрый день. Нужен совет, потому что я не понимаю в какую сторону копать для решения проблемы.

Есть сетевая папка, в которой лежат текстовые документы, которые необходимо прочесть. Код вида Directory.Exists([путь к папке]) выдает ошибку существования папки до тех пор, пока я вручную в проводнике не открою указанный путь. Или любую другую папку на сервере. После открытия папки алгоритм работает как часы.

Что именно происходит при ручном открытии папки на уровне системы, что обеспечивает в дальнейшем корректную работы программы? И есть ли предположения, как можно обеспечить это поведение программно?

Код ниже использует найденный здесь(https://stackoverflow.com/questions/295538/how-to-provide-user-name-and-password-when-connecting-to-a-network-share/39540451#39540451) вариант обеспечить принудительную установку логина пользователя. Что с ним, что без него, при обращении по пути выше - папка не существует, пока не будет открыта в проводнике.

List<string> _directories = new List<string> { @"\\[server01]\WorkflowTemplate\", @"\\[server02]\WorkflowTemplate\", @"\\[server03]\WorkflowTemplate\" };
        ImpersonationHelper.Impersonate(domain, login, pwd, delegate
        {
            foreach (string dir in _directories)
            {
                if (!Directory.Exists(dir))
                {
                    Console.WriteLine("Directory {0} doesn't exists.", dir);
                }
                else
                {
                    Console.WriteLine("{0} has {1} sudfolder", dir, Directory.GetDirectories(dir).Count());
                }
            }
        });
Answer 1

Вопрос решил вспомогательный класс, который был описан вот здесь: https://stackoverflow.com/a/1197430/7493716

Все еще буду признательна за комментарии, объясняющие природу ошибки. В итоге работающий код выглядит так:

using (new NetworkConnection(dir, new NetworkCredential(login, pwd, domain)))
{
     some work with folder...
}
READ ALSO
Передать На вторую форму значение label

Передать На вторую форму значение label

При нажатии на ячейку открывается новая форма, где должен отобразиться текст label:

169
C# Функция запрос-ответ в System.IO.Ports.SerialPort

C# Функция запрос-ответ в System.IO.Ports.SerialPort

Здравствуйте, есть функция которая отправляет в послед порт N байт, и ожидает получение ответа (N байт ответа) заданное время, если данные получены...

170
Функция 0x06 Modbus RTU C#

Функция 0x06 Modbus RTU C#

Нашел неплохой пример для работы с протоколом Modbus RTU Code Project

150
Десериализации XML в DataSet

Десериализации XML в DataSet

Сделал dataset сериализацию XMLНо не могу теперь сделать Десериализации в dataset и вывести в грид

162