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可能会被另一个线程截短,然后被另一个线程控制,请尝试以下操作:

  • 在所有printf()调用之后,使用fflush(stdout);,以确保缓冲区已刷新
  • 如果这还不能解决问题,您可以使用命名的或。基本上,用Wait包装所有printf+fflush调用,然后在指定的互斥体上发送一个信号

  • (不确定是否有必要执行步骤2)。

    既然您说您的程序是多线程的,我猜这个函数正在执行的线程很早就被终止了。在调试器下运行时不会发生这种情况。您需要一些线程同步,以确保允许此线程完成。

    您的程序是否运行多个线程?@Luke:是的,需要修改吗@fbrereton:不确定这是怎么产生的,但它在我的代码中。调试模式下的单线程…更混乱。为什么要在输出中嵌入HTML标记?如果这是通过浏览器进行的,我会查看浏览器和/或连接问题。您正在使用printf和%s。。。它不是将FindFileData.cFileName视为非unicode字符串吗?我希望在输出中只写入第一个字符…:)因为我只是试着运行它:)我相信它会发生,但不太可能。值得注意的是,标准输出在windows上没有行缓冲。这意味着交错输出到标准输出的可能性要大得多。冲洗是一种很好的做法,关键部分是最简单的选择,最适合这个问题。