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

win32API FindNextFile() 查寻动态生成的文件

2012-09-28 
win32API FindNextFile() 查找动态生成的文件C/C++ codeHANDLE hFile INVALID_HANDLE_VALUE__try{wchar

win32API FindNextFile() 查找动态生成的文件

C/C++ code
    HANDLE hFile = INVALID_HANDLE_VALUE;    __try    {        wchar_t *src = L"E:\\z_file_cpy\\*";        WIN32_FIND_DATA info;        hFile = FindFirstFile(src, &info);        if (hFile == INVALID_HANDLE_VALUE)        {            cout<< "function:【FindFirstFile】 fails! GetLastError() = "<< GetLastError()<< endl;            __leave;        }        wcout<< info.cFileName<< endl;        while (true)        {            BOOL res = FindNextFile(hFile, &info);            if (!res)            {                DWORD err_code = GetLastError();                if (err_code == ERROR_NO_MORE_FILES)                {                    Sleep(1000);                                        continue;//                    break;                }                else                {                    cout<< "function:【FindNextFile】 fails! GetLastError() = "<< GetLastError()<< endl;                    __leave;                }            }            wcout<< info.cFileName<< endl;        }    }    __finally    {        //release resources        if (hFile != INVALID_HANDLE_VALUE)        {            BOOL res = FindClose(hFile);            if (!res)            {                cout<< "function:【FindClose】 fails! GetLastError() = "<< GetLastError()<< endl;            }        }    }    return true;


这样做,只能枚举文件夹中现有的文件,当我向文件夹中放入新的文件时,程序根本就找不到,求大神指教,小弟在此谢过了

[解决办法]
这是当然,只能检索当前存在的文件,标准的文件对话框也是这样的。
[解决办法]
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
system("dir /b /ad c:\\*.* >d:\\alldirs.txt");
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。

[解决办法]
探讨
引用:
这是当然,只能检索当前存在的文件,标准的文件对话框也是这样的。

那假如说,现在有两个线程,一个线程在E:\z_file_cpy文件夹中不停生成文件,另一个线程不停在E:\z_file_cpy文件夹中查找文件(查找文件的速度比文件生成的速度快),这种情况下,如何保证能枚举
所有生成的文件呢?

[解决办法]
要监测文件创建事件SHChangeNotify
SHCNE_CREATE当新建一个文件是产生通知
SHCNE_UPDATEITEM需要更新文件夹时产生通知,当同一时间创建或者删除大量文件的时候,他不会一个一个的进行通知。而是整体通知一下说需要更新这个文件夹。此时就需要重新遍历该文件夹。

热点排行