首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么读取一个文件夹目录下的全部文件

2012-01-21 
如何读取一个文件夹目录下的全部文件如题要读取一个文件夹中的所有文件,如果还有一层文件夹的也要进入到文

如何读取一个文件夹目录下的全部文件
如题
要读取一个文件夹中的所有文件,如果还有一层文件夹的也要进入到文件夹目录中进行文件的读取,直到读完为止!!

[解决办法]
#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();

}

}

}

[解决办法]

C# code

            foreach (string file in System.IO.Directory.GetFiles("E:\\新建文件夹", "*.*", System.IO.SearchOption.AllDirectories))                Console.WriteLine(file);
[解决办法]
要用到递归
C# code
 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)
}

}
}

热点排行