首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ _findfirst/_findnext 遍歷文件遺漏第一個文件:邏輯順序錯誤

     編輯:程式設計綜合問答

錯誤代碼

if (FindFirst(...) == 0) {
    do {
        list.push_back(StrRecord.Name);
    } while (FindNext(StrRecord) == 0);
    FindClose(StrRecord);
}

問題:`FindFirst` 已讀取第一個文件,但 `do-while` 循環體在判斷 `FindNext` 前已執行一次 `push_back`,導致第一個文件被處理,**但若 `FindFirst` 失敗直接返回,則無問題**。實際遺漏通常發生在**判斷條件寫反**或**未處理 `FindFirst` 返回的第一個文件**。

標準正確模式

intptr_t handle = _findfirst(pattern.c_str(), &data);
if (handle != -1) {
    do {
        // 處理 data.name(包含第一個文件)
        files.push_back(data.name);
    } while (_findnext(handle, &data) == 0);
    _findclose(handle);
}

關鍵點

  • `_findfirst` 返回句柄並填充第一個文件信息,**必須在循環前處理**。
  • `_findnext` 返回 0 表示成功,-1 表示結束/出錯。
  • 注意 `_finddata_t` 結構體在 32/64 位下大小不同,需用 `` 正確類型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved