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

MFC path.Format("%s/*.*") 詳解:通配符 *. * 的文件匹配語義

     編輯:程式設計疑難解答

代碼現場


CString path;
path.Format("%s/*.*", directory_path); // directory_path 如 "C:\\Data"

格式化字符串拆解

片段含義
%s佔位符,替換為 directory_path 的值(目錄路徑)
/路徑分隔符(Windows 接受正斜槓)
*.*通配符模式:匹配「任意文件名.任意擴展名」

`*.*` 核心語義

  • `*`(星號):匹配任意長度(含 0)的任意字符序列。
  • `.`(點號):字面匹配點號,分隔文件名與擴展名。
  • 組合 `*.*`:匹配**擁有擴展名的所有文件**(如 `a.txt`、`image.jpg`、`data.bin`),**不匹配無擴展名文件**(如 `README`、`Makefile`)以及目錄項 `.` 和 `..`。

Windows API 實際行為補充

在 `FindFirstFile/FindNextFile` 中:

  • `*.*` 等價於 `*`(匹配所有文件和目錄,含無擴展名)。
  • 若需**僅匹配文件**,需配合 `FILE_ATTRIBUTE_NORMAL` 過濾或判斷 `!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)`。
  • 若需**匹配所有項目**(含隱藏、系統、無擴展名),建議直接用 `*`。

最佳實踐建議


// 通用搜索:所有文件和子目錄
path.Format("%s/*", dir);          // 推薦:比 *.* 更標準

// 僅搜索文件(配合屬性判斷)
path.Format("%s/*", dir);
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
    // 是文件
}

總結

path.Format("%s/*.*", dir) 生成的字符串如 C:\Data\*.*,作為 Windows 文件搜索模式傳給 `FindFirstFile`,**實際效果等同於 `*`**,匹配該目錄下所有文件系统項目。理解通配符語義,避免「以為只匹配帶點的文件」的誤區。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved