C++ FindFirstFile和FindNext文件问题
输出:C++ FindFirstFile和FindNext文件问题,c++,c,visual-studio,winapi,C++,C,Visual Studio,Winapi,输出: The first file found is LOG_09.TXT Next file name is LOG_10.TXT Next file name is LOG_11.TXT Next fi (cut off word "file"?) 功能: //Find last modified log file hFind = FindFirstFile("..\\..\\LOGS\\LOG*.TXT", &FindFi
The first file found is LOG_09.TXT
Next file name is LOG_10.TXT
Next file name is LOG_11.TXT
Next fi (cut off word "file"?)
功能:
//Find last modified log file
hFind = FindFirstFile("..\\..\\LOGS\\LOG*.TXT", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("FindFirstFile failed (%d)\n", GetLastError());
return;
}
else
{
printf("The first file found is %s<br>",FindFileData.cFileName);
//List all the other files in the directory.
while (FindNextFile(hFind, &FindFileData) != 0)
{
printf ("Next file name is %s<br>", FindFileData.cFileName); //NOT DISPLAYING ALL NAMES CONSISTENTLY??
}
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
{
printf ("FindNextFile error. Error is %u.\n", dwError);
return (-1);
}
}
//查找上次修改的日志文件
hFind=FindFirstFile(“..\\..\\LOGS\\LOG*.TXT”、&FindFileData);
if(hFind==无效的句柄值)
{
printf(“FindFirstFile失败(%d)\n”,GetLastError());
返回;
}
其他的
{
printf(“找到的第一个文件是%s
”,FindFileData.cFileName);
//列出目录中的所有其他文件。
while(FindNextFile(hFind和FindFileData)!=0)
{
printf(“下一个文件名是%s
”,FindFileData.cFileName);//没有一致地显示所有名称??
}
dwError=GetLastError();
FindClose(hFind);
if(dwError!=错误\u无\u更多\u文件)
{
printf(“FindNextFile错误。错误为%u.\n”,dwError);
返回(-1);
}
}
在我的printf中,“file”一词实际上被删去了。有时它会显示所有文件名,有时会显示一些文件名,有时甚至不会完成printf引号中的行,如上图所示。这是什么原因造成的?我是否被printf功能误导了?在调试器中,看起来一切正常,但我想确定并理解这一点。例如,我在文件中输入后没有空字符,对吗?为什么这里会被切断?谢谢
编辑:不正确-单线程应用程序库。(对不起,以前是多线程的)
打印到一个文件会给出完整的文件列表,而printf并发是“不稳定的”。我不知道为什么…由于您的应用程序是多线程的,printf可能会被另一个线程截短,然后被另一个线程控制,请尝试以下操作:
(不确定是否有必要执行步骤2)。既然您说您的程序是多线程的,我猜这个函数正在执行的线程很早就被终止了。在调试器下运行时不会发生这种情况。您需要一些线程同步,以确保允许此线程完成。您的程序是否运行多个线程?@Luke:是的,需要修改吗@fbrereton:不确定这是怎么产生的,但它在我的代码中。调试模式下的单线程…更混乱。为什么要在输出中嵌入HTML标记?如果这是通过浏览器进行的,我会查看浏览器和/或连接问题。您正在使用printf和%s。。。它不是将FindFileData.cFileName视为非unicode字符串吗?我希望在输出中只写入第一个字符…:)因为我只是试着运行它:)我相信它会发生,但不太可能。值得注意的是,标准输出在windows上没有行缓冲。这意味着交错输出到标准输出的可能性要大得多。冲洗是一种很好的做法,关键部分是最简单的选择,最适合这个问题。