2015-08-22 6 views
-2

Как проверить, какие текстовые файлы существуют в каталоге, и получить имена текстовых файлов в этом каталоге на C++.C++ File I/O с несколькими файлами

Моя цель - перечислить текстовые файлы в определенном каталоге и позволить пользователю загружать один из файлов.

Я использую Windows.

Мой последний код выглядит следующим образом:

ListAllTxtFiles(L"C:\\Users\\Tnc\Desktop\\Yazılım Çalışmaları\\Projects\\Oyun Projem\\data\\SaveFiles\\"); 

void CObjectHandling::ListAllTxtFiles(const wchar_t *Directory) 
{ 
    TCHAR Buffer[2048]; 
    wsprintf(Buffer, L"s%*.txt", Directory);//there are security considerations about this function 

    WIN32_FIND_DATAW FindData; 
    HANDLE FileHandle = FindFirstFileW(Buffer, &FindData); 

    if (FileHandle == INVALID_HANDLE_VALUE) 
    { 
     printf("Could not find any files..\n"); 
    } 
    else 
    { 
     do 
     { 
      printf("Found %s\\%s\n", Directory, FindData.cFileName); 
      // Do stuff with your text file here... 
     } while (FindNextFile(FileHandle, &FindData)); 
     CloseHandle(FileHandle); 
    } 
} 
+1

Что значит «файлы существуют в файле»? Вы имели в виду, что «файлы существуют в каталоге»? –

+0

Обычно, в Unix, папки каталогов a.k.a. содержат файлы и подкаталоги (подпапки). Файлы содержат данные. Windows имеет множество представлений о файлах в файлах, но это не поддерживается стандартной библиотекой C++ (вы можете использовать Windows API для доступа к таким потокам). Аналогично, старый Mac и, возможно, все еще в OS X, имел представление о «вилках» файла. Я не знаю много об этом, но если он все еще там, вы можете использовать для этого OS X API. Наконец, существует много видов архивов, например. zip, с файлами в одном файле. Это оно? –

+0

Подводя итог, вам необходимо уточнить свой вопрос **. Если это действительно файлы в файлах, то, пожалуйста, укажите конкретное такое понятие (например, Windows, Mac или какой-то архив). Или иначе, используйте общую терминологию, где каталоги никогда не называются файлами. –

ответ

0

Стандартная библиотека не содержит понятия каталогов, вам нужно будет обратиться к родным API, платформы или другой библиотеки, такие как импульс (который затем вызовите эти API для вас). Поскольку вы не указали, какую платформу вы используете, и поскольку я не могу прокомментировать ваш вопрос, я дам предложения для Windows.

В Windows вы можете использовать FindFirstFile, что позволяет получить дескриптор первого файла, который соответствует некоторой строке, например, «* .txt» в вашем случае. Чтобы найти дополнительные файлы, вы можете использовать FindNextFile, который позволяет выполнять итерацию по всем файлам в определенном каталоге, вы даже можете легко реализовать что-то, что делает это заново, если вы хотите иметь текстовые файлы в подпапках.

void 
ListAllTxtFiles(const char *Directory) 
{ 
    char Buffer[2048]; 
    sprintf(Buffer, "%s*.txt", Directory); 

    WIN32_FIND_DATA FindData; 
    HANDLE FileHandle = FindFirstFile(Buffer, &FindData); 

    if (FileHandle == INVALID_HANDLE_VALUE) 
    { 
     printf("Could not find any files..\n"); 
    } 
    else 
    { 
     do 
     { 
      printf("Found %s\\%s\n", Directory, FindData.cFileName); 
      // Do stuff with your text file here... 
     } while (FindNextFile(FileHandle, &FindData)); 
     CloseHandle(FileHandle); 
    } 
} 

Вы можете вызывать эту функцию как

ListAllTxtFiles("path\\to\\my\\text\\files\\"); 

с хвостовых обратной косой черты.

+0

Я использую окна, если бы вы могли написать образец кода, я бы его присвоил. Спасибо – bfkjohns

+0

Я добавил очень простой пример кода, который должен вас запустить. – Peter

+0

Спасибо. Этот код будет действительно полезен – bfkjohns

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