c++中,當需要開啟檔案時,首先需要判斷路徑是否存在;若不存在,則需要建立路徑。當存在多級路徑時,需要依次建立。
使用非mfc函式。
#include //_access fun
#include //_mkdir fun
bool isfolderexist(char * folder)
int32_t createdirectory(char* directorypath)
if (dirpathlen > filename_max)
char tmpdirpath[filename_max] = ;
for (uint32_t i = 0; i < dirpathlen; ++i)
}} return 0;
}
其中,主要用到了兩個函式,分別是_access()和_mkdir(),這是不依賴mfc的函式。
標頭檔案:
函式原型:int _access(const char *pathname, int mode);
引數:pathname 為檔案路徑或目錄路徑, mode 為訪問許可權(在不同系統中可能用不能的巨集定義重新定義)。
返回值:如果檔案具有指定的訪問許可權,則函式返回0;如果檔案不存在或者不能訪問指定的許可權,則返回-1。
備註:當pathname為檔案時,_access函式判斷檔案是否存在,並判斷檔案是否可以用mode值指定的模式進行訪問。
當pathname為目錄時,_access只判斷指定目錄是否存在,在windows nt和windows 2000中,所有的目錄都只有讀寫許可權。
mode的值和含義如下所示:
00——只檢查檔案是否存在
02——寫許可權
04——讀許可權
06——讀寫許可權
標頭檔案:
函式原型:int _mkdir( const char *dirname );
引數:dirname是指向目錄的路徑名指標。
返回值:返回0表示建立目錄成功,返回-1表示失敗。
備註:只能建立一級目錄,即dirname倒數第二級必須是已經存在,否則建立不成功。
因此當有多級目錄時,在建立之前,需要檢驗路徑或者檔案是否存在,用_access(dirname,0)來檢驗,返回0表示存在,-1不存在。
測試呼叫函式為如下所示:
#include #define filename_max 260
int main()
; systemtime sys;
getlocaltime(&sys);
sprintf(filepath, "%s\\%d\\log_%04d%02d%02d_%02d%02d%02d.txt", datadir, sn, sys.wyear, sys.wmonth, sys.wday, sys.whour, sys.wminute, sys.wsecond);
if (!isfolderexist((char*)filepath))
gbf = fopen(filepath, "a");
//寫檔案的各種操作
if (gbf != null)
system("pause");
return 0;
}
另外,c++建立資料夾的四種方法,請參考自: Python 判斷檔案路徑是否存在,不存在建立
def check and creat dir file url 判斷檔案是否存在,檔案路徑不存在則建立資料夾 param file url 檔案路徑,包含檔名 return file gang list file url.split if len file gang list 1 fname,fe...
mysql 11 若不存在則插入,存在則更新
參考 需求 有乙個裝置,當該裝置狀態發生變更時把狀態資訊插入資料庫,若已記錄該裝置就更新狀態,不存在則插入狀態資訊 解決方法 1.建立一張表,改表有兩個字段 create table device state device id varchar 200 null comment 裝置id state...
IOS開發中判斷檔案是否存在,不存在則拷貝
objc view plain copy 首先,先總結一下如何獲取documents目錄,在ios開發中,我們經常需要檢索documents目錄的完整路徑以便讀取和寫入檔案,我總結了以下兩種方法 1 nsstring documentsdirectory nshomedirectory docume...