2013-08-23 2 views
1

Я новичок в C++. И я хочу написать функцию, которая принимает имена из папки.Как сохранить имя файла в папке в массив в C++?

например, у меня есть папка с именем C: \ TEST, и в этой папке у меня много файлов text.txt. Я хочу сохранить все .txt-файлы в строковом массиве.

Любой может помочь мне в решении этой проблемы.

я пытался что-то вроде этого, но я не смог

const int arr_size = 10; 
some_type src[arr_size]; 
// ... 
some_type dest[arr_size]; 
std::copy(std::begin(src), std::end(src), std::begin(dest)); 
+0

Вы можете исследовать его в стеке. есть так много солнов. [смотрите здесь] [1] [1]: http://stackoverflow.com/questions/612097/how-can-i-get-a-list-of-files-in -a-directory-using-c-or-c –

ответ

3

Использование файловой системы наддува:

#include<vector> 
#include<string> 
#include <iostream> 
#include <iterator> 
#include <algorithm> 
#include <boost/filesystem.hpp> 
using namespace std; 
using namespace boost::filesystem; 

int main(int argc, char* argv[]) 
{ 
    vector<string> fnames; //your filenames will be stored here 

    path p (argv[1]); // C:\TEST 
    directory_iterator di(p); 
    directory_iterator di_end; 

    while(di != di_end) 
    { 
     fnames.push_back(di->path().filename().string()); 
     ++di; 
    } 
} 

Укажите C:\TEST в качестве аргумента командной строки в указанной выше программе.

0
TCHAR szDir[MAX_PATH]; 
WIN32_FIND_DATA ffd; 
HANDLE hFind = INVALID_HANDLE_VALUE; 

hFind = FindFirstFile(szDir, &ffd); 

if (INVALID_HANDLE_VALUE != hFind) 
{ 
do 
    { 
    if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
    { 
    // You can do a recursive search here, the current file is a directory 
    } 
    src[arr_size] = ffd.cFileName; 
    arr_size++; 
    } 
    while (FindNextFile(hFind, &ffd) != 0); 


    FindClose(hFind); 
} 
+0

Является ли это Windows API? Он не искал строго решение для Windows - он искал C++, что для меня подразумевает что-то умеренно кросс-платформенное. – SevenBits

+0

@SevenBits, он поставил теги C++ и Windows. – Pankaj

+0

Итак? Возможно, он поставил этот тег, потому что он компилирует для этой платформы. Возможно, он компилируется в Windows, но все еще нуждается в портативном. Кто знает? Он попросил ** C++ ** - не Windows API (кроме того, Windows API написан на C, и, хотя я знаю, что вы можете скомпилировать C на C++, потому что он попросил C++, я предполагаю, что ему нужна функция с использованием библиотек C++). – SevenBits

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