Re: [問題] 讀檔跟開檔
※ 引述《qazq (...)》之銘言:
: 推 ianfang:最後一句不對~是如果你要做的是讀取exe或是bmp等非文字檔 06/22 00:06
: → ianfang:類的才是用wb rb 06/22 00:07
: → zlw:有b的比較保險,我看現在Windows的記事本都沒在用text mode不 06/22 09:30
: → zlw:然怎會都沒在鳥0x1A的 06/22 09:30
: 推 ianfang:我是要說的是 不是因為用fread/fwrite 才用wb/rb 06/22 13:17
小弟原本的認知也是, 要用fread/fwrite時最好用b mode....
如果都是fscanf/fprintf處理純文字時, 可以考慮用t mode....
感覺就好像ftp裡用ASC mode或者是BIN mode傳輸時的影響....
(Hmm~~這樣也不太對, 從實測的差異來看應該不是換行的問題)
小弟剛好今天早上在搞OpenGL的GLSL的shader code時....
也被fopen的mode給愚弄了一個上午, 下面貼段小sample吧:)
========資料檔案: TextFile.txt========
1234567 7654321 1357246 2461357
ABCDEFG abcdefg AbCdEfG aBcDeFg
1234567 7654321 1357246 2461357
ABCDEFG abcdefg AbCdEfG aBcDeFg
========資料檔結束, 最後僅換行========
========測試用的小程式 開始區========
#include <cstdio>
#include <cstdlib>
int main(void)
{
int size = 0;
FILE *fp = NULL;
char text[1024] = {0};
fp = fopen("TestFile.txt", "rb");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
printf("Open by binary: %d\n", size);
fseek(fp, 0, SEEK_SET);
fread(text, 1, size, fp);
text[size] = '\0';
printf("%s\n", text);
fclose(fp);
fp = fopen("TestFile.txt", "rt");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
printf("Open by text: %d\n", size);
fseek(fp, 0, SEEK_SET);
fread(text, 1, size, fp);
text[size] = '\0';
printf("%s\n", text);
fclose(fp);
system("PAUSE");
return 0;
}
========測試用的小程式 結束區========
程式很簡單, 開檔, 算大小, fread讀檔, 印出來, 關檔....
資料檔是純文字(MS Win下), 兩小段最大的差異也只有紅藍而已....
而檔案大小在檔案總管下看的確都是134 bytes....
但是下面後者的結果, 浪費了小弟今天一整個早上Q_Q~
========Dev C++執行結果 開始區========
Open by binary: 134
1234567 7654321 1357246 2461357
ABCDEFG abcdefg AbCdEfG aBcDeFg
1234567 7654321 1357246 2461357
ABCDEFG abcdefg AbCdEfG aBcDeFg
Open by text: 134
1234567 7654321 1357246 2461357
ABCDEFG abcdefg AbCdEfG aBcDeFg
1234567 7654321 1357246 2461357
ABCDEFG abcdefg AbCdEfG aBcDeFg
eFg
Press any key to continue . . .
========Dev C++執行結果 結束區========
小弟還沒時間去研究分析, 解釋的部份就留給諸位先進吧<(_ _)>
--
不好意思, 手動修一下printf的typo....@_@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 222.66.238.68
※ 編輯: VictorTom 來自: 222.66.238.68 (06/22 14:16)
推
06/22 14:32, , 1F
06/22 14:32, 1F
→
06/22 14:33, , 2F
06/22 14:33, 2F
→
06/22 14:33, , 3F
06/22 14:33, 3F
推
06/22 14:37, , 4F
06/22 14:37, 4F
→
06/22 14:38, , 5F
06/22 14:38, 5F
→
06/22 14:39, , 6F
06/22 14:39, 6F
→
06/22 19:04, , 7F
06/22 19:04, 7F
→
06/22 19:05, , 8F
06/22 19:05, 8F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章