我需要传输目录中包含的所有文件。
我应该如何继续读取特定目录中的所有文件,然后通过套接字传输?
修改 我没有问题转移, 只是不知道如何下载完整的目录。
答案 0 :(得分: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.
请注意,如果您对boost FS感兴趣,还有更好的跨平台替代方案。
答案 1 :(得分: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"));