2015-05-01 2 views
-1

Мне нужно перенести все файлы, содержащиеся в каталоге.Как прочитать все файлы, содержащиеся в каталоге (WINDOWS)

Как перейти к чтению всех файлов в определенном каталоге, а затем передать через сокет?

EDIT: У меня нет никаких проблем с передачей, просто не знаю, что я должен сделать, чтобы загрузить полный каталог.

+0

Какая часть у вас есть проблемы с? Получение списка каталогов? Отправка файлов? Оба они зависят от операционной системы, в которой вы находитесь. В системах POSIX (например, Linux и OSX) вы можете использовать ['opendir'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/opendir.html) и [' readdir'] (http: // pubs .opengroup.org/onlinepubs/9699919799/функции/readdir.html). В Windows вы можете использовать ['FindFirstFile'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx) и [' FindNextFile'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364428%28v=vs.85%29.aspx). –

+0

Передача файла по файлу. Мне нужно перенести всю папку. – Draek

+0

У меня нет проблем с передачей, просто не знаю, что мне делать, чтобы загрузить полный каталог – Draek

ответ

1

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

// Returns files in the specified directory path. 
vector<wstring> list_files(wstring path) 
{ 
    vector<wstring> subdirs, matches; 
    WIN32_FIND_DATA ffd; 
    HANDLE hFind = FindFirstFile((path + L"\\*.*").c_str(), &ffd); 
    if (hFind != INVALID_HANDLE_VALUE) 
    { 
     do 
     { 
      wstring filename = ffd.cFileName; 
      if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 
       matches.push_back(path + L"\\" + filename); 
     } while (FindNextFile(hFind, &ffd) != 0); 
    } 
    FindClose(hFind); 
    return matches; 
} 

Пример:

vector<wstring> files = list_files("C:\\pr0n"); 
// 'files' now contains 1,000 file entries. 
// Directories are not included. 
// Now send them over individually. 

Обратите внимание, что есть лучшие альтернативы, кросс-платформенный, если вы заинтересованы, такие как повышающего FS.

0

Это пример кода от MDSN, но я немного изменил его, поскольку вы просто хотите получить все файлы из текущего каталога. Я предполагаю, что вы используете MFC. Если не ссылаться на это listing.

void Recurse(LPCTSTR pstr) 
{ 
    CFileFind finder; 

    // build a string with wildcards 
    CString strWildcard(pstr); 
    strWildcard += _T("\\*.*"); 

    // start working for files 
    BOOL bWorking = finder.FindFile(strWildcard); 

    while (bWorking) 
    { 
     bWorking = finder.FindNextFile(); 

     // skip . and .. files; otherwise, we'd 
     // recur infinitely! 

     if (finder.IsDots()) 
     continue; 

     if (!finder.IsDirectory()) 
     {   
      CString str = finder.GetFilePath(); 
      AfxMessageBox(str); 
     } 
    } 

    finder.Close(); 
} 

Чтобы использовать его, звоните:

Recurse(_T("C:\\intel")); 
Смежные вопросы