FindFirstFile和FindNextFile问题

输出:

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"?) 

function:

 //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
",FindFileData.cFileName); //List all the other files in the directory. while (FindNextFile(hFind, &FindFileData) != 0) { printf ("Next file name is %s
", 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); } }

在我的printf中,“文件”这个词实际上被缩短了。 有时它显示所有文件名有时会显示一些,有时它甚至没有完成printf引用行,如上所示。 造成这种情况的原因是什么?我被printffunction误导了? 在调试器中,它看起来一切正常,但我想确定并理解这一点。 例如,我在文件中没有空字符? 为什么要在这里切断? 谢谢。

编辑: 不正确 – 单线程应用程序库。 (以前是multithreading的,对不起)

打印到文件时会提供完整的文件列表,而printf会同时“不稳定”。 不确定我明白为什么……

由于您的应用程序是multithreading的,因此printf可能会被另一个线程中途缩短,然后由另一个线程获得控制权,请尝试以下操作:

  1. 在所有printf()调用之后,使用fflush(stdout);来确保刷新缓冲区。
  2. 如果这不能解决问题,您可以使用命名的互斥锁或关键部分来保护stdout资源。 基本上使用Wait包装所有printf + fflush调用,然后在指定的互斥锁上包含一个Signal。

(不确定是否需要第2步)。

既然你说你的程序是multithreading的,我猜想这个函数正在执行的线程正在被提前杀死。 在调试器下运行时不会发生这种情况。 您需要一些线程同步以确保允许此线程完成。