English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

最近在看C語言中 檔案處理 的部分
有些觀念實在是沒有釐清
我知道程式碼中用到的變數、陣列、結構等等一般都是存在記憶體裡
我的書中說利用fprint、fwrite等函式可將變數、陣列、結構等資料存到 檔案 裡
所謂的存到檔案裡是指存到硬碟嗎?
如果不是的話那所謂存到檔案裡是存到哪裡呢?
如果是的話,那是存到硬碟的哪裡?檔名就是在程式中fopen用的名稱嗎?副檔名又是什麼呢?
謝謝

2005-10-29 13:46:45 · 3 個解答 · 發問者 Anonymous in 電腦與網際網路 程式設計

To 小綿羊
如果是存到緩衝區的話,那是不是當執行結束後緩衝區的檔案就會跟著消失?那怎麼才能真的存到硬碟的檔案裡?

2005-10-30 06:47:39 · update #1

To 小溫泉
fopen可以指定路徑嗎?我的書中沒有介紹到耶!

2005-10-30 06:48:44 · update #2

3 個解答

這邊有一個介紹C檔案 開啟/寫入 相關函式的文件,請看看
http://www.fg.tp.edu.tw/~anny/mypdf/file.pdf#search='%E6%AA%94%E6%A1%88%20FILE%20*%20%20%20fclose'
----------------------------------------------------------------------------------------
一般程式使用方式:
FILE *fp; //定義檔案指標
fp=fopen("路徑","讀寫模式");
fwrite/fprintf/fscanf/fseek 都是利用fp來運作寫入或謮取檔案
fclose(fp);
----------------------------------------------------------------------------------------------
C語言檔案有二種模式:
(1)文字模式檔(Text Mode) (2)二進位模式檔(Binary Mode)
而f開頭的就是文字模式 如fopen/fprintf/fclose

所有的標準輸出入函數均再 stdio.h的表頭檔中作函數原型宣告, 因此要使用這些函數必需先引入此表頭檔。
開檔函數的格式為:
FILE *fopen("file_name","attribute");
fopen 函數為標準輸出入的開檔函數,其需要兩個字串參數:
(1)第一個是檔案名稱字串
(2)第二個是檔案屬性字串。
當開檔成功後 fopen 會傳回指向 FILE 結構的指標變數,FILE 結構是在 stdio.h 中宣告的資料結構,此資料結構包含檔案的編號、緩衝區、檔案指標、與檔案屬性等資料。傳入的檔案參數可以給全路徑的檔名。
檔案讀寫選擇及其屬性:
字 串 意 義
"r" 開一已存在的文字模式檔只供輸入用
"w" 開一新的文字模式檔只供輸出用
"a" 開一文字模式檔供由檔末附加資料
"rb" 開一已存在二進位模式檔只供輸入用
"wb" 開一二進位模式檔只供輸出用
"ab" 開一二進位模式檔供由檔末附加資料
"r+" 開一已存在文字模式檔供讀寫
"w+" 開一新文字模式檔供讀寫
"a+" 開一文字模式檔案供由檔末讀寫起
"rb+" 開一已存在二進位模式檔供讀寫
"wb+" 開一新二進位模式檔供讀寫
"ab+" 開一二進位模式檔案供由檔末讀寫起
上面的屬性中 b 表二進位模式檔案、 + 表示可讀寫檔案、w 是開新檔若檔案已存在則舊的資料會被蓋過、a 則由檔末附加資料。

舉一個將1-100寫入一檔案,檔名取為noname.txt
#include
#include
#include
int main()
{
FILE *fp;
int i;

if( (fp=fopen("c:\\noname.txt","w"))==NULL) { //開檔失敗fopen會傳回NULL給fp
cout<<"Can't open file";
exit(1);
}

for(i=1; i <=100; ++i) fprintf(fp,"%3d\n",i); //把 1到100寫入fp
fclose(fp); //關檔後,電腦會將緩衝區的資料,真實寫入c:\noname.txt, 你去C:\可見
}

2005-10-30 09:09:45 · answer #1 · answered by Anonymous · 0 0

FILE *f1,*f2;
fopen、fprint、fwrite…等這些 f 開頭的函式都是有用到緩衝區 Buffer,它會自動自磁碟機內規畫一塊 Buffer,經由 Buffer 來做存取的動作。
基本上不管檔名或副檔名,都是由設計者自行指定。
還有一種檔案處理的函式是沒有用到緩衝區的,而執行後存取的方式是採用類似 UNIX ( UNIX-like )的檔案處理方式,而這個就要請你自行規畫一塊緩衝區。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2005.10.30.
1.是的!會跟著消失!它會把緩衝區交還給作業系統處置。
2.把資料存入指定的檔案中,書本有範例吧!
C 語言教學的書本內容都會有範例說明,請自行查詢。
3.路徑可以指定的!
如:C:\\abc\\123\\xyz.txt

2005-10-29 16:54:51 · answer #2 · answered by Big_John-tw 7 · 0 0

file我是不常用= =' 但是其中幾點還算清楚...

副檔名的部分 是可以自己取名的...
例如 .dat .txt .abc .def 都可以 不要太長就好
而fopen的時候需要指定路徑 當你指向的位子沒有檔案...這我就不知道了
我使用ofstream的時候 當指向的路徑沒有檔案 則會自動建立
如指向 ./123.dat 就會在debug上一層資料夾的裡面建立一個123.dat的檔案

2005-10-29 14:06:57 · answer #3 · answered by _溫泉_ 2 · 0 0

fedest.com, questions and answers