檔案操作函式 1

2021-07-23 23:06:59 字數 4028 閱讀 8247

函式原型: int access(const char *filename, int mode)

所屬標頭檔案:#include , #include

返回值: 返回0 表示成功,返回 -1表示錯誤。

filename:目錄路徑或者檔案路徑

mode: 這個函式檢查檔案屬性: (0111,八進位制對應rwx)

06           檢查讀寫許可權 

r_ok  04     檢查讀許可權 

w_ok  02     檢查寫許可權 

x_ok  01     檢查執行許可權 

f_ok  00     檢查檔案的存在性,如果檔案存在,返回0,不存在,返回-1

函式原型: int mkdir(const char *path, mode_t mode)

所屬標頭檔案: #include , #include

返回值: 返回值: 返回0 表示成功,返回 -1表示錯誤,並且會設定errno值。

path:資料夾路徑或者檔案路徑 

mode: 這個函式檢查檔案屬性: (0111, 第一位代表檔案所有者的許可權,第二位代表檔案使用者組的許可權,第三位代表其他使用者的許可權),可多個許可權相或

s_irwxu                       0700許可權,代表該檔案所有者擁有讀,寫和執行操作的許可權,相當於s_irusr | s_iwusr | s_ixusr

s_irusr(s_iread)   0400許可權,代表該檔案所有者擁有可讀的許可權

s_iwusr(s_iwrite) 0200許可權,代表該檔案所有者擁有可寫的許可權

s_ixusr(s_iexec)    0100許可權,代表該檔案所有者擁有執行的許可權

s_irwxg                       0070許可權,代表該檔案使用者組擁有讀,寫和執行操作的許可權,相當於s_irgrp | s_iwgrp | s_ixgrp

s_irgrp                       0040許可權,代表該檔案使用者組擁有可讀的許可權

s_iwgrp                       0020許可權,代表該檔案使用者組擁有可寫的許可權

s_ixgrp                        0010許可權,代表該檔案使用者組擁有執行的許可權

s_irwxo                         0007許可權,代表其他使用者擁有讀,寫和執行操作的許可權,相當於s_iroth | s_iwoth | s_ixoth

s_iroth                         0004許可權,代表其他使用者擁有可讀的許可權

s_iwoth                        0002許可權,代表其他使用者擁有可寫的許可權

s_ixoth                         0001許可權,代表其他使用者擁有執行的許可權     

(1)  c++版本

正確的路徑為:  /usr/test/dir,   /usr/test/dir/,   dir

排除掉這種路徑:   /,   usr/test/dir/    

#include #include #include #include #include #include #include #include #define dprint printf    //除錯輸出

#define eprint printf //錯誤輸出

#define dir_mode (0777) //資料夾許可權

#define dir_path_max_size (256) //資料夾路徑最大大小

int checkdirpath(const std::string& sdirpath)

//引數合法性處理,避免這種情況,只傳/

if(0 == sdirpath.compare("/"))

//引數合法性處理,避免這種情況,傳usr/local

size_t nbegin = sdirpath.find("/", 0); //找到返回最開始出現位置,沒找到返回std::string::npos

if(std::string::npos != nbegin && 0 != nbegin)

return 0;

}int createdirs(const std::string& sdirpath)

//開始建立

char szdirpath[dir_path_max_size] = ;

strncpy(szdirpath, sdirpath.c_str(), dir_path_max_size);

int nlen=strlen(szdirpath);

for(int i = 1; i < nlen; i++ ) //如/usr/test/dir/,這裡建立/usr、 /usr/test 、 /usr/test/dir, 這種情況可以建立完

}szdirpath[i]='/';}}

if(nlen > 0 && (access(szdirpath, 0) != 0) ) //這裡建立這種情況usr或者/usr/test/dir

}dprint("createdirs (%s) success \n", sdirpath.c_str());

return 0;

}int main(void)

(2)  c版本

正確的路徑為:  /usr/test/dir,   /usr/test/dir/,  dir

排除掉這種路徑:   /,  usr/test/dir/  

#include #include #include #include #include #include #include #include #define dprint printf    //除錯輸出

#define eprint printf //錯誤輸出

#define dir_mode (0777) //資料夾許可權

#define dir_path_max_size (256) //資料夾路徑最大大小

int check_dir_path(const char* dir_path)

//引數合法性處理,避免這種情況,只傳/

if(0 == strcmp(dir_path, "/"))

//引數合法性處理,避免這種情況,傳usr/local

//strstr是一種函式,從字串str1中查詢是否有符串str2,如果有,從str1中的str2位置起,返回str1的指標,如果沒有,返回null。

char* p = strstr(dir_path, "/");

if(null != p && p != dir_path) //如果能匹配到/,出現位置不在首位, 即p位址跟dir_path (等同於&dir_path[0])位址不一樣, 返回錯誤

return 0;

}int create_dirs(const char* dir_path)

//開始建立

char sz_dir_path[dir_path_max_size] = ;

strncpy(sz_dir_path, dir_path, dir_path_max_size);

int len = strlen(sz_dir_path);

int i;

for(i = 1; i < len; i++ ) //如/usr/test/dir/,這裡建立/usr、 /usr/test 、 /usr/test/dir, 這種情況可以建立完

}sz_dir_path[i]='/';}}

if(len > 0 && (access(sz_dir_path, 0) != 0) ) //這裡建立這種情況usr或者/usr/test/dir

}dprint("create dirs (%s) success \n", dir_path);

return 0;

}int main(void)

檔案操作函式(1) fseek

int fseek file stream,long offset,int origin 第乙個引數stream為檔案 指標 第二個引數offset為 偏移量,正數表示正向偏移,負數表示負向偏移 第三個引數origin設定從檔案的 開始偏移,可能取值為 seek cur seek end 或 see...

檔案操作1

ios 沙盒中一共有 4個資料夾 安裝目錄 home 唯讀 documents 長期放使用者檔案或資料夾,rw tmp 存放臨時檔案,rw library caches 存放快取檔案,rw nsarray nssearchpathfordirectoriesindomains nssearchpat...

檔案操作 1

檔案操作 不論操作什麼型別的檔案,第一步先開啟乙個檔案,第二步,讀寫檔案,第三步關閉檔案。fopen r 以唯讀方式開啟檔案,該檔案必須存在。r 以可讀寫方式開啟檔案,該檔案必須存在。用r 寫檔案時候,從檔案開始位置寫入 rb 讀寫開啟乙個二進位制檔案,允許讀寫資料,檔案必須存在。rw 讀寫開啟乙個...