c c 小知識1 (檔案)

2021-08-07 09:02:07 字數 4347 閱讀 6542

1、c按行寫入/讀取

按行寫:char指標字元末尾加入』\n』即可;不能加入』\r』,然後

file *file = fopen(path,"a");//"a"代表不覆蓋寫

char *str = "***\n";

int offset = 1;

int len = strlen(str);

fwrite(str,len,offset,file);

fclose(file);

//'\n':向下移動一行,並移動左右

//'\r':return到當前行的最左邊

按行寫:

file *file = fopen(path,"r");

char buf[1024];

while(null != fgets(buf,1024,file))

fclose(file);

2.遍歷資料夾下的所有檔案

===示例**===

#include

#include //linux和windows下都提供該標頭檔案

int main()

else while (_findnext(lfdir, &filedir) == 0);

_findclose(lfdir);}}

===部分結構說明===_finddata_t 結構用來記錄查詢到的檔案的資訊,實際上有_finddata32_t,_finddata32i64_t,_finddata64i32_t,_finddata64_t,_wfinddata32_t,_wfinddata32i64_t,_wfinddata64i32_t,_wfinddata64_t八個結構,但都只是在32位/64位整數和字元型別上有所區別,但整體上相同。

struct _finddata_t ;

//對於不支援檔案建立時間,上次訪問時間的檔案系統,時間賦值為-1

檔案屬性常量檔案屬性常量

乙個檔案/目錄可以有多種屬性,每種屬性可以是下面列出的屬性之一。

_a_arch

檔案。檔案被backup指令改變或清除時被設定。值:0x20。

_a_hidden

隱藏。使用dir指令一般看不到,除非使用/ah選項。值:0x02。

_a_normal

唯讀。不能以「寫」為目的開啟該檔案,並且不能建立同名的檔案。值:0x01。

_a_subdir

子目錄。值:0x10。

_a_system

系統檔案。使用dir指令一般看不見,除非使用/a或/a:s選項。值:0x04。

要檢查x是否含有某個屬性a,可以用x & a進行檢查。指定多個屬性可以使用按位or運算子,例如_a_system | _a_rdonly | _a_hidden

三個函式

_findfirst()

intptr_t _findfirst(  //intptr是int或int64的typedef

const

char * filespec, //目標檔案說明,可包含萬用字元

struct _finddata_t *fileinfo //函式和將會填入檔案/目錄資訊

);//失敗 返回-1

//成功 返回乙個唯一的搜尋控制代碼標識

_findnext()

int _findnext(

intptr_t handle, //搜尋控制代碼

struct _finddata_t *fileinfo //函式將會填入檔案/目錄資訊

);//成功 返回0

//失敗 返回-1

_findclose()

int _findclose(

intptr_t handle //搜尋控制代碼

);//關閉控制代碼病釋放相應的資源

//成功 返回0

//失敗 返回-1

參考

error

在新建乙個工程裡,同樣的**進行測試出現錯誤

檢查發現,原版本是在win32下進行編譯的,第二個測試是在x64環境下編譯的,將第二個工程改為win32執行,**就可以順利執行啦。若想在x64的環境下執行,可將示例**改為(這段**在win32下也是可以執行的,具體的優劣沒有進行過分析啦,個人認為若只需要滿足32位的情況下,用64位去編譯,記憶體的消耗肯定就相應的增大了,會造成一定的浪費的):

#include 

#include

int main()

else while (_findnext64(lfdir, &filedir) == 0);

_findclose(lfdir);}}

參考:3.資料夾的建立和刪除建立的過程中是可以多層建立的,刪除是刪除指定的資料夾

//呼叫c執行庫函式,dirname包含路徑以及名字

#include

int _mkdir( const

char *dirname ); //成功返回0,失敗返回-1

int _rmdir( const

char *dirname ); //成功返回0,失敗返回-1

//呼叫system的md命令

system("mkdir fpath");//fpath資料夾會被建立到當前工程目錄下,若要在其他路徑下,需要將具體路徑寫入,如d:\\path\\1,不能是d:/path/1

system("rmdir fpath");

// c++ 呼叫windows api

#include

string path = "d:/path";

bool flag = createdirectory(fpath.c_str(), null);//引數型別分別位:lpcstr,lpsecurity_attributes(不知道是啥)

flag = removedirectory(fpath.c_str());

//兩個都是成功true,失敗false

在vs裡呼叫windows api進行資料夾建立,createdirectory()函式引數如果提示」error: 「const char」型別的實參與」lpcwstr」型別的形參不相容」,可利用下面的方法解決:

專案選單——專案屬性(最後乙個)——配置屬性——常規——專案預設值——字符集,將使用unicode字符集改為未設定即可。

在建立檔案或資料夾時,可以先利用access判斷檔案或資料夾是否存在或具有某些許可權:

#include 

int _access(const

char *filename, int mode);

//若存在或具有許可權時,返回0;若不存在或不具有許可權時返回-1;

/*mode代表

0 (f_ok) 只判斷是否存在

2 (r_ok) 判斷寫入許可權

4 (w_ok) 判斷讀取許可權

6 (x_ok) 判斷執行許可權

*/

錯誤**

eaccess—引數pathname 所指定的檔案不符合所要求測試的許可權。

erofs— 欲測試寫入許可權的檔案存在於唯讀檔案系統內。

efault— 引數pathname指標超出可訪問記憶體空間。

einval— 引數mode 不正確。

enametoolong— 引數pathname太長。

enotdir— 引數pathname為一目錄。

enomem —核心記憶體不足

eloop— 引數pathname有過多符號連線問題。

eio i/o— 訪問錯誤。

參考:

1 檔案測試 2 檔案操作

1 檔案測試函式 2 檔案操作 新建檔案 fopen filename,w 以 寫 的方式開啟乙個不存在的檔案,就會新建該檔案 檔案刪除 unlink 檔案複製 copy filename,aaa bb.txt 盡量使用 和相對路徑,因為linux只認 也沒有磁碟分割槽,而windows 和 都認 ...

1 檔案上傳

當上傳乙個檔案時,會先將其作為臨時目錄傳到伺服器,如果不將其啟動到其它目錄,就會刪除。php上傳後端 upload.php uname post uname echo uname.1.首先判斷是否出錯 if files userfile error 0 2.判斷上傳型別是否符合規定 echo fil...

二 檔案I O 1 檔案描述符號

對於核心而言,所有開啟的檔案都通過檔案描述符號引用。檔案描述符是乙個非負整數。當開啟乙個現有檔案或建立乙個新檔案時候,核心向程序返回乙個檔案描述符。當讀或寫乙個檔案時候,使用open或creat返回的檔案描述符標識該檔案,將作為引數傳給read或write。在依從posix portable ope...