如何读取一个文件夹目录下的全部文件
如题
要读取一个文件夹中的所有文件,如果还有一层文件夹的也要进入到文件夹目录中进行文件的读取,直到读完为止!!
[解决办法]
#include "StdAfx.h"
#include "SampleBase.h"
#include <windows.h>
#include <shlwapi.h>
#include <stack>
#include <string>
#ifdef UNICODE
# define tstring wstring
#else
# define tstring string
#endif
using namespace std;
void CLoadImageIssueSample::Run(HWND hwnd)
{
WIN32_FIND_DATA findFileData;
ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));
TCHAR szCurDir[MAX_PATH];
::GetCurrentDirectory(MAX_PATH, szCurDir);
HANDLE handle = FindFirstFile(TEXT("Resources\\CLoadImageIssueSample\\*"), &findFileData);
stack<tstring> dirStack;
tstring baseDir(szCurDir);
baseDir += TEXT("\\");
baseDir += TEXT("Resources\\CLoadImageIssueSample");
while ( handle != INVALID_HANDLE_VALUE )
{
do
{
tstring fileName(baseDir);
fileName += TEXT("\\");
fileName += findFileData.cFileName;
if ( (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ==
FILE_ATTRIBUTE_DIRECTORY )
{
if ( StrCmp(findFileData.cFileName, TEXT(".")) == 0 ||
StrCmp(findFileData.cFileName, TEXT("..")) == 0 )
continue;
else
{
dirStack.push(fileName);
// 并不删除cFileName,到时一起释放
ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));
}
}
else
{
if ( NULL == ::LoadImage(NULL, fileName.c_str(),
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) )
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
}
ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));
}
} while ( FindNextFile(handle, &findFileData) != 0 );
FindClose(handle);
if ( !dirStack.empty() )
{
baseDir = dirStack.top();
tstring format = baseDir + TEXT("\\*");
handle = FindFirstFile(format.c_str(), &findFileData);
dirStack.pop();
}
}
}
[解决办法]
foreach (string file in System.IO.Directory.GetFiles("E:\\新建文件夹", "*.*", System.IO.SearchOption.AllDirectories)) Console.WriteLine(file);
[解决办法]
要用到递归
private void GetFiles(string FilePath) { DirectoryInfo Dir = new DirectoryInfo(FilePath); DirectoryInfo[] Dirs = Dir.GetDirectories(); if (Dirs.Length > 0) { foreach (DirectoryInfo info in Dirs) { GetFiles(info.FullName); } } else { FileInfo[] Files = Dir.GetFiles(); }
[解决办法]
我给你发一个吧,你改一下就行了
List<FileInfo> Tfiles = new List<FileInfo>();
public static void DelEmpt(string strPath)
{
DirectoryInfo dir = new DirectoryInfo(strPath);
DirectoryInfo[] dirs = dir.GetDirectories();
FileInfo[] files=dir.GetFiles();
if(dirs.Length>0)
{
foreach(DirectoryInfo subDir in dirs)
{
DelEmpt(subDir.FullName);
}
}
if(files.Length>0)
{
foreach(FileInfo file in files)
{
Tfiles.Add(file)
}
}
}