并用FindFirstFile问题FindNextFile(FindFirstFile an

2019-10-17 09:40发布

输出:

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);
      }

    }

单词“文件”其实是剪短我的printf。 有时,它会显示所有的文件名,有时它显示了几下,有时甚至没有完成的printf引述线,如上所示。 是什么原因造成这一点,我会被由printf的功能,误导? 在调试器看起来一切正常,但我想肯定和理解这一点。 例如,我没有空字符后,我的文件吗? 为什么在这里被切断? 谢谢。

编辑: 不正确的 -单线程应用程序库。 (是以前多线程的,抱歉)

打印到文件提供文件的完整列表,而printf的同时是“不稳定”。 不知道我理解为什么....

Answer 1:

由于您的应用程序是多线程的,则可能的printf打通剪短半路上,被另一个线程,然后得到控制,试试这个:

  1. 毕竟printf()的调用,使用fflush(标准输出);,以确保缓冲被刷新。
  2. 如果不解决这个问题,你可以保护与命名标准输出资源互斥或关键部分 。 基本上所有的包裹的printf + fflush与等候的呼叫,随后信号在命名的互斥体。

(不知道第2步将是必要的)。



Answer 2:

既然你说你的程序是多线程的,我猜想,这个函数执行线程中被打死初。 调试器下运行时,这不会发生。 你需要一些线程同步,以确保该线程被允许完成。



文章来源: FindFirstFile and FindNextFile question