MFC C++初学,迭代目录下的文件名,文件长度,打算用vector数组保存,怎么实现?谢谢

MFC C++初学,迭代目录下的文件名,文件长度,打算用vector数组保存,怎么实现?谢谢,第1张

#include "stdafx.h"

#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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12075951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存