none
Рекурсивный поиск файлов RRS feed

  • Вопрос

  • Всем доброй ночи!

    Программа на C#, но как я понимаю без WIN32 API не обойтись!

    Проблема заключается в следующем, мне необходимо осуществить поиск файлов по определенным критериям: по маске, архивный и тд.

    Так же мне необходимо выполнять поиск в отдельном потоке, при этом пользователь может остановить поиск в любое время нажатием на кнопку. В качестве потока использую BackgroundWorker. А вот для перебора файлов DirectoryInfo и FileInfo как мне кажется не подходит, тк мне нужно прерывать моментально работу, а не ждать пока я получу массив допустим - "FileInfo [] FIles = DIrectoryInfo.GetFiles()". Искал в google функции которые бы смогли заменить данные классы (DirectoryInfo и FIleInfo), наткнулся  на FindFirstFile и FindNextFIle но проблема в том, что там имена файлов содержатся в ANSI, что исключает русские имена. Можете посоветовать какие ни будь другие функции?? Или же как мне получить имена в Unicode??

    Всем спасибо!!

    2 апреля 2011 г. 1:16

Ответы

  • Добрый день, VeryHappyCactus !
    1. ANSI не исключает русские имена файлов.
    2. Функции WIN32 API, как правило, имеют несколько реализаций.
    Например, для FindFirstFile и FindNextFIle в С++
    имеются ANSI версии : FindFirstFileA и FindNextFIleA;
    имеются версии UNICODE(UTF-16) : FindFirstFileW и FindNextFIleW.
    3. Windows многозадачная операционная система. Если Вам мешает работать
    ожидание исполнения "FileInfo [] FIles = DIrectoryInfo.GetFiles()" -
    точно также будет мешать поиск с использованием FindFirstFile и FindNextFIle.
    В таких случаях поиск запускают в отдельном потоке и разрабатывают сихронизацию
    выполнения задач.
    4. Возможно, Вы неправильно понимаете, что без WIN32 API не обойтись.

    P.S. Если Вас интересует пример поиска с использованием FindFirstFile и FindNextFIle в

    С++, могу выложить код.

    • Помечено в качестве ответа Abolmasov Dmitry 4 апреля 2011 г. 5:44
    2 апреля 2011 г. 9:10
  • Спасибо, разобрался! Сделал через DirectInfo и FileInfo
    • Помечено в качестве ответа VeryHappyCactus 8 апреля 2011 г. 21:41
    8 апреля 2011 г. 21:41

Все ответы

  • Добрый день, VeryHappyCactus !
    1. ANSI не исключает русские имена файлов.
    2. Функции WIN32 API, как правило, имеют несколько реализаций.
    Например, для FindFirstFile и FindNextFIle в С++
    имеются ANSI версии : FindFirstFileA и FindNextFIleA;
    имеются версии UNICODE(UTF-16) : FindFirstFileW и FindNextFIleW.
    3. Windows многозадачная операционная система. Если Вам мешает работать
    ожидание исполнения "FileInfo [] FIles = DIrectoryInfo.GetFiles()" -
    точно также будет мешать поиск с использованием FindFirstFile и FindNextFIle.
    В таких случаях поиск запускают в отдельном потоке и разрабатывают сихронизацию
    выполнения задач.
    4. Возможно, Вы неправильно понимаете, что без WIN32 API не обойтись.

    P.S. Если Вас интересует пример поиска с использованием FindFirstFile и FindNextFIle в

    С++, могу выложить код.

    • Помечено в качестве ответа Abolmasov Dmitry 4 апреля 2011 г. 5:44
    2 апреля 2011 г. 9:10
  • Спасибо, разобрался! Сделал через DirectInfo и FileInfo
    • Помечено в качестве ответа VeryHappyCactus 8 апреля 2011 г. 21:41
    8 апреля 2011 г. 21:41
  • Для многих задач GetFiles() не подходит так как может выбрасывать исключение. Так что без рекурсии не обойтись.
    13 июня 2011 г. 10:54
  • > DIrectoryInfo.GetFiles()

    лучше использовать DirectoryInfo.EnumerateFiles

    13 августа 2011 г. 9:24