1.關與remove
remove用法:remove(「檔名」);
作用:刪除某檔案
注意:用這個函式時一定要先關閉檔案,再刪除,否則就會刪除失敗。
例如:先刪除檔案再關閉檔案就會刪除失敗
file *fp;
if((fp=fopen("檔案5","ab"))==null)
remove("檔案5"); //先刪除
fclose(fp); //後關閉
執行後:檔案仍然存在,刪除失敗
先關閉檔案再刪除才能刪除成功
file *fp;
if((fp=fopen("檔案5","ab"))==null)
fclose(fp); //先關閉
remove("檔案5"); //後刪除
2:關於rename
rename用法:rename(「原檔名」,「新檔名」);
作用:修改某檔案的名稱
注意:這個和remove類似,都要先關閉檔案,再刪除。
例如:先改名後關閉檔案
file *fp;
if((fp=fopen("檔案5","ab"))==null)
rename("檔案5","檔案567");//先改名
fclose(fp); //後關閉檔案
如果先關閉檔案再改名
file *fp;
if((fp=fopen("檔案5","ab"))==null)
fclose(fp); //先關閉檔案
rename("檔案5","檔案567");//後改名
在呼叫函式時,如果被呼叫函式裡面用到了remove和rename,一定要在呼叫函式前關閉檔案,否則操作就會失敗,因為這個錯誤不明顯,不是很好找,之前有一次我找了半天才知道是這個問題,在這提醒大家一下。
例如:
void handle()
fclose(fq);//先關閉檔案
remove("檔案5");//再刪除檔案
}int main()
handle();//先呼叫函式,在呼叫函式前沒有關閉檔案
fclose(fp);
return 0;
}
大家注意:handle函式這段**看似正確,但因為我們在main函式中並沒有在呼叫handle函式前關閉檔案,所以最中會導致刪除失敗。結果如下:
檔案仍然存在,刪除失敗。
也就是說,指向同乙個檔案的指標可以有多個,但只要有乙個指標還指向這個檔案,那麼該檔案用remove函式刪除就會刪除失敗。上面這個例子就是因為在呼叫handle函式前沒有關閉檔案,所以在handle函式裡面即使執行了fclose(fq)這一語句,但在main函式中的fp還是指向該檔案。也就是說還有指標指向待刪除的檔案。最終導致刪除失敗。
我們只要將main函式中的handle()和fclose(fp)交換下位置就可以了。我們看**:
void handle()
fclose(fq);//先關閉檔案
remove("檔案5");//再刪除檔案
}int main()
fclose(fp);//先關閉檔案
handle();//後呼叫函式
return 0;
}
執行後:
檔案刪除成功。
*3.還是在呼叫函式前不關閉檔案的一些問題
我們看下面這段**:
void handle()
fread(b,sizeof(b),1,fq);
puts(b);
fclose(fq);
}int main()
fwrite(a,sizeof(a),1,fp);
handle();
fclose(fp);
return 0;
}
執行結果如下
我們期待的結果應該是陣列a的內容"1234",但最終顯示的卻是亂碼。
這是因為雖然我們在main函式中將陣列a的內容存到檔案中,但此時我們沒有關閉檔案,陣列a的內容並沒有正真傳到檔案中,它還在緩衝區內。所有我們在執行handle函式時陣列b獲取的並不是陣列a的內容(檔案之前沒有任何內容)
所以我們還是得在執行handle前關閉檔案,讓在緩衝區中的內容到檔案中去,也就是交換下面這兩行**的順序。
handle();
fclose(fp);
交換後的結果如下:
現在就正確了。
*4.在用wb+,wa+,wr+這類既能讀也能寫的開啟方式時,盡量不要同時用fread和fwrite。如下:
file *fp;
char a[5]="1234",b[5];
if((fp=fopen("檔案5","ab+"))==null)
fread(b,sizeof(b),,fp);
fwrite(a,sizeof(a),1,fp);
flcose(fp);
我們想先從檔案讀取資料到陣列b中,然後再將a中的內容寫入檔案。但這樣我們並不能達到我們的目的,不信你可是試試。
但在fread和fwrite增加一些清空快取區函式或者檔案定位函式,就能同時讀之後接著寫。例如fseek,rewind。
fread(b,sizeof(b),,fp);
fseek(fp,0,1);
fwrite(a,sizeof(a),1,fp);
這樣就可以了。
這其中原因我也不清楚,只是在這裡提醒大家一下。··
希望能幫到大家!
今天所遇到的一些問題
今天我繼續前兩天的抓包任務,剛開始遇到了url中出現中文的問題,我不知道如何去解決,於是問了一下同組的師兄,他告訴我說把中文的編碼給變一下,於是我就去將文字的編碼給改變了,通過網上的文字編碼轉換器把文字的編碼給換了一下,結果還是不行。於是他就告訴我讓他先試試 最後他終於解出來了,用php直接把中文的...
antD vue 遇到的一些問題處理
1.maxlength 50 v decorator realname initialvalue info.realname invalid prop type check failed for prop maxlength expected number with value 50,got str...
編寫C語言遇到的一些問題5
1.在windows 下 vs2013中除錯帶引數的程式時,在屬性頁 配置屬性 除錯 命令引數中新增除錯需要帶的引數 2.假設我們的工程在my yolov3資料夾下,且程式中有讀文字檔案的操作,假設用debug編譯的,當執行程式時,需要把文字檔案放置在my yolov3 debug資料夾下 當除錯該...