gpt4 book ai didi

c - 使用 SHFileOperation 按日期删除文件和文件夹

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:17 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序将使用 Windows API 根据日期删除一组与特定命名模式(通配符)匹配的文件/文件夹

...

SHFILEOPSTRUCT shFileOpStruct = {
.hwnd = NULL,
.wFunc = processByDate->op,
.pTo = NULL,
.fFlags = FOF_NOCONFIRMATION | FOF_SILENT
};

buildReferenceDate( &refTime, processByDate->nDays );
hFind = FindFirstFile( processByDate->srcFileName, &findFileData );
errorCode = GetLastError();

while ( errorCode == ERROR_SUCCESS ) {
LONG res = CompareFileTime( &refTime, &findFileData.ftCreationTime );

if ( (processByDate->nDays ^ res) > 0 ) {
sprintf( strrchr(processByDate->srcFileName, '\\') + 1, "%s%c",
findFileData.cFileName, '\0');
shFileOpStruct.pFrom = processByDate->srcFileName;
fprintf( stdout, "\n%s\n", shFileOpStruct.pFrom);
fprintf( stdout, "\n0x%x\n", SHFileOperation( &shFileOpStruct ));
}
FindNextFile( hFind, &findFileData );
errorCode = GetLastError();
}

if ( errorCode != ERROR_NO_MORE_FILES )
displayError ( stdout, errorCode );

...

只有第一个匹配的文件被删除,因为 FindNextFile 以“句柄无效”终止。显然 SHFileOperation 以某种方式使文件句柄无效(或者至少我想是这样)。我能想到的唯一解决办法是保存匹配的文件/文件夹的名称,然后将它们一一删除。还有其他更简单的解决方案吗?

谢谢

最佳答案

    FindNextFile( hFind, &findFileData );
errorCode = GetLastError();

这是错误的。当您从 FindNextFile() 返回 FALSE 时,调用 GetLastError()。修复:

    if (!FindNextFile( hFind, &findFileData ) {
errorCode = GetLastError();
}

关于c - 使用 SHFileOperation 按日期删除文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7778536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com