none
Получение списка файлов в сетевой папке, C# RRS feed

  • Вопрос

  • Обычно пользуюсь System.IO.Directory.GetFiles(...) - возвращает массив полных имен файлов.

    Но если этой функции передать путь к папке в сети, то ничего не возвращается. Путь вида: \\... .

    Если используется диалог выбора имени файла (OpenFileDialog), то он прекрасно работает с сетевыми путями. В чем может быть проблема, что я не так делаю?

    PS как понимаю, русские символы здесь не при чем. Я пробовал использовать их в пути на локальных дисках - все отлично работает.
    14 сентября 2017 г. 9:08

Ответы

  • GetFiles работает с сетевыми путями. Но, если сетевая папка защищена паролем и у текущего пользователя нет на нее доступа, нужно предварительно предоставить пароль. Обычно это можно сделать командой NET USE, или WINAPI-функцией WNetAddConnection2.
    • Помечено в качестве ответа Denis Prokofjev 15 сентября 2017 г. 7:25
    14 сентября 2017 г. 11:43

Все ответы

  • GetFiles работает с сетевыми путями. Но, если сетевая папка защищена паролем и у текущего пользователя нет на нее доступа, нужно предварительно предоставить пароль. Обычно это можно сделать командой NET USE, или WINAPI-функцией WNetAddConnection2.
    • Помечено в качестве ответа Denis Prokofjev 15 сентября 2017 г. 7:25
    14 сентября 2017 г. 11:43
  • Так же убедитесь что у вас правильно введены символы \. Помните об их особенностях при использовании в строковых константах.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    14 сентября 2017 г. 12:41
    Модератор
  • А как объяснить то, что я свободно захожу в эту папку через Total Commander, обычный проводник и даже через диалог выбора файла OpenFileDialog? Но при этом GetFiles не работает. В чем разница между этими случаями?

    Насчет символов я проверю. Текст я беру из (TextBox).Text

    Даже более того - Directory.Exists(Folder) - срабатывает и возвращает true. Folder - 

    public string Folder
            {
                get {
                    return txtFolder.Text;
                }
                set {
                    txtFolder.Text = value;
                }
            }

    14 сентября 2017 г. 12:42
  • Трудно сказать определенно, доступность файлов по сети зависит от многих факторов.  Может, в одних случаях используются закэшированные проводником учетные данные (если пользователь поставил галку запомнить в окне авторизации), а других они не работают. А может как-то влияют атрибуты файлов типа Скрытый/Системный.

    14 сентября 2017 г. 16:43
  • Всем спасибо, за то, что навели на правильную мысль. Я добавил сетевой диск на папку в сети и теперь GetFiles() работает с путями, указанными через имя сетевого диска и напрямую через \\... 

    Дальше не копал, мне этого сейчас достаточно.

    PS Однако странно... Теперь я через сетевой путь могу открыть даже папку, которая не входит в добавленный мною сетевой диск.
    15 сентября 2017 г. 7:24