1. 程式人生 > >C標準庫 io.h原始碼 檢查檔案是否存在

C標準庫 io.h原始碼 檢查檔案是否存在

#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


bool isFileExist(const char *filename){
    if( _access(filename, 0) == 0 ) {
        // exist
        printf("Exist %s\n",filename);
    }else{
        printf("Not exist %s\n",filename);
    }
    return true;
}


int main(){
    isFileExist("c:\\boot.ini");
    isFileExist("c:\\bootmgr");
    return 0;

}

測試結果:

>gcc test.cpp

>a
Not exist c:\boot.ini
Exist c:\bootmgr


=====================================================================================

這個標頭檔案 外圍的條件編譯是非 posix。windows平臺 還有 CreateFile啊,GetFileAttributeEx啊,FindFirstFile

BOOL FindFirstFileExists(LPCTSTR lpPath, DWORD dwFilter)


{
  WIN32_FIND_DATA fd;
  HANDLE hFind = FindFirstFile(lpPath, &fd);
  BOOL bFilter = (FALSE == dwFilter) ? TRUE : fd.dwFileAttributes & dwFilter;
  BOOL RetValue = ((hFind != INVALID_HANDLE_VALUE) && bFilter) ? TRUE : FALSE;
  FindClose(hFind);
  return RetValue;
}

// 檢查一個路徑是否存在(絕對路徑、相對路徑,檔案或資料夾均可)

BOOL FilePathExists(LPCTSTR lpPath)
{
  return FindFirstFileExists(lpPath, FALSE);
}

// 檢查一個資料夾是否存在(絕對路徑、相對路徑均可)
BOOL FolderExists(LPCTSTR lpPath)
{
  return FindFirstFileExists(lpPath, FILE_ATTRIBUTE_DIRECTORY);
}

HANDLE FindFirstFileEx(
  LPCTSTR lpFileName, // file name
  FINDEX_INFO_LEVELS fInfoLevelId, // information level
  LPVOID lpFindFileData, // information buffer
  FINDEX_SEARCH_OPS fSearchOp, // filtering type
  LPVOID lpSearchFilter, // search criteria
  DWORD dwAdditionalFlags // reserved
);

都是些 windows平臺的函式。不是跨平臺的。微軟 真是 煩人。