#include <Windows.h>
#include <vector>
#include <iostream>
using namespace std
struct FileObject
{
TCHAR szFileName[MAX_PATH+1]
DWORD dwFileSize
}
//文件列表
vector<FileObject> g_vFileList
int ScanFiles(LPCTSTR lpFilePath)
{
//设置wcout, 使能输出中文
std::wcout.imbue(std::locale("chs"))
//初始化搜索路径
TCHAR szFind[MAX_PATH]
WIN32_FIND_DATAW FindFileData
wcscpy_s(szFind, MAX_PATH, lpFilePath)
wcscat_s(szFind,MAX_PATH, L"\\*.*")
HANDLE hFind=::FindFirstFile(szFind,&FindFileData)
if(INVALID_HANDLE_VALUE == hFind)
{
//cout<<"No File Found!"<<endl
return -1
}
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//排除 . 和 .. 目录
if(wcscmp(FindFileData.cFileName,L".")!=0 && wcscmp(FindFileData.cFileName, L"..")!=0)
{
//发现子目录,递归之
TCHAR szFile[MAX_PATH] = {0}
wcscpy_s(szFile, MAX_PATH, lpFilePath)
wcscat_s(szFile, MAX_PATH, L"\\")
wcscat_s(szFile,MAX_PATH, FindFileData.cFileName)
ScanFiles(szFile)
}
}
else //是文件则加入vector列表
{
//格式化路径
TCHAR szBuffer[MAX_PATH] = {0}
wsprintf(szBuffer, L"%s\\%s", lpFilePath, FindFileData.cFileName)
//填充FileObject对象
FileObject FileObj
wcscpy_s(FileObj.szFileName, szBuffer)
FileObj.dwFileSize = FindFileData.nFileSizeLow
//加入vector列表
g_vFileList.push_back(FileObj)
}
}while(::FindNextFile(hFind,&FindFileData))
::FindClose(hFind)
return 0
}
int _tmain(int argc, _TCHAR* argv[])
{
ScanFiles(L"G:\\TDDOWNLOAD")
//遍历列表
vector<FileObject>::iterator iter
for (iter = g_vFileList.begin() iter != g_vFileList.end() iter++)
{
wcout<<L"文件路径:"<<(*iter).szFileName<<endl
wcout<<L"文件大小:"<<(*iter).dwFileSize<<endl
}
system("pause")
return 0
}
代码不知是你是否能看懂,如有不懂,可以私信我~~
其实么,你会用char就会用wchar_t啊,对你来说都是字符,只不过是不同的宽度罢了,用起来都是一样的,当然所有的地方都要加上w,wstring是宽字符的字符串,里面保存的就是类似wchar_t数组的东西,wifstream是宽字符的文件输入流,wcout是宽字符的标准输出流。下面这个程序运行以后读源代码文件本身,并且把第一行打出来,也就是打印://读我自己main.cpp:
//读我自己
#include <iostream>
using std::wcout
using std::endl
#include <string>
using std::wstring
#include <fstream>
using std::wifstream
int main() {
wifstream fin("main.cpp")
wstring str
fin >>str
wcout <<str <<endl
fin.close()
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)