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...