如何读取目录中包含的所有文件(WINDOWS)

时间:2015-05-01 02:40:42

标签: c++

我需要传输目录中包含的所有文件。

我应该如何继续读取特定目录中的所有文件,然后通过套接字传输?

修改 我没有问题转移, 只是不知道如何下载完整的目录。

2 个答案:

答案 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"));