FindFirstFile и FindNextFile вопрос - PullRequest
       24

FindFirstFile и FindNextFile вопрос

1 голос
/ 26 августа 2009

Выход:

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 одновременно "нестабилен". Не уверен, что понимаю почему ....

Ответы [ 2 ]

2 голосов
/ 26 августа 2009

Поскольку вы говорите, что ваша программа является многопоточной, я думаю, что поток, в котором выполняется эта функция, рано прерывается. Этого не произойдет при запуске под отладчиком. Вам нужна некоторая синхронизация потоков, чтобы этот поток мог завершиться.

1 голос
/ 26 августа 2009

Поскольку ваше приложение является многопоточным, printf может обрезаться на полпути другим потоком, который затем получает контроль, попробуйте следующее:

  1. После всех вызовов printf () используйте fflush (stdout) ;, чтобы убедиться, что буфер очищен.
  2. Если это не помогает, вы можете защитить ресурс stdout с именем mutex или критической секцией . По сути, оберните все вызовы printf + fflush с ожиданием, за которым следует сигнал на названном мьютексе.

(Не уверен, будет ли необходим шаг 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...