2012-10-08 85 views
1

我使用的fread從文件中讀取,然後使用fwrite來寫anothe文件。但是新文件的內容與舊文件的內容略有不同(新文件有更多字符),你知道什麼會導致這種情況,以及如何解決它?FREAD和fwrite有差異的結果

閱讀

file= fopen(locationHolder[x], "r");  
chunkToSend.chunkcontent.data = malloc(20000); 
chunkToSend.chunkcontent.len = fread(chunkToSend.chunkcontent.data , 1, 20000, file); 

file = fopen(filelocation, "w"); 
fwrite(responseChunk->chunkcontent.data, 1, responseChunk->chunkcontent.len, file); 

這是我讀文件:

†+ƒCÃÅ«*u`‘Ÿ‘Ž÷-U‰ÎVøÈ ýÇ}‡3²SûYè³…öeŠ 
5êèMØ「—­~K¾ëb–܆º[ö¿äWÔM) 
ø˜i ¯’#\×b!¥^b€÷ûƒãq.]…©\.u7بøöÔv´cgÒD–o_ÊûG}^ªmÞŸ}ÛåŒ}?Ž…WíëH 
?̓>—」*î`ÔÿïÖtàNÕ$Cú¾@Ž›¿Žíohy5ÅE5qز9¡_S雉+þ¦¥²‘*Jíf† 
#¸«vÌÏ s¼üEÃe+vLrF¯Gå3šú¦Ì×Mçó 
<f¥#ÇyEBŠ1iÉŒ6pZa›MSÅîl:ôšËħ 
Jþ}ÜÍÃÑ1˜´+$f̆\Ø$±)sæâ¼üõÅ‘Ï™Àd–ÚDM*Ì 
R¯èÕ¼£C†}— 
¸mݼž„ª1øL5E‰_ð7âHö:´¡`¼E[Ö<BJüR’½Ê€「%8p 
LÄ] ¡û2ì––û}ðCÓîŽBáæeÎøëåZ§ " 
[Òºèf¯Œÿ»'L"g‚æ°C«G§¸IŸ‰ˆÚ‘_´G’.ÂÝp¯K%RÕlÍâ3÷À+\9rØ‚/˱V¨?Ù}ܨ›`l½î~RŽbŒ—w˜[£¦2™¾RÿÁeÎPbeö‘¿±¤N#Oåãº& 
Êc9OËbÿÊ3ÚV⛩²TPdx»ÉbèÁW8×MAà¥ó]D 
å™QØè’¿=Ÿ±­$BºÀŒdž\3âZ³‰×…׉…¹dؾíÂÂÎA^ǦèÕ`±³ï 
<µ¡QGÙY—-p÷›AÂ+pžD‘©ûÊÄÉ÷¢y×çÃt…ˆæîYiGÇÊAðÁô¡4YWoâ=ÊÁ+¤·•Ï)ùïéÚTVî±0ME¡{Èÿ‚.G°Ágª¯‚É9&­ê¡ÑUIÃĤb†§JâY&_SæþJãi›©'È›XA’M[dY&²AbîAëfG½€oN(oM+CzíµÚ 

這是我寫的文件:

†+ƒCÃÅ«*u`‘Ÿ‘Ž÷-U‰ÎVøÈ ýÇ}‡3²SûYè³…öeŠ 
5êèMØ「—­~K¾ëb–܆º[ö¿äWÔM) 
ø˜i ¯’#\×b!¥^b€÷ûƒãq.]…©\.u7بøöÔv´cgÒD–o_ÊûG}^ªmÞŸ}O…ªœ¦ÛåŒ}?Ž…WíëH 
?̓>—」*î`ÔÿïÖtàNÕköR,E·$Cú¾@Ž›¿Žíohy5ÅE5qز9¡_S雉+þ¦¥²‘*Jíf† 
#¸«vÌÏ s¼üEÃe+vLrßÞ¾"ò1%áoÌû/êF¯Gå3šú¦Ì×Mçó 
<f¥#ÇyEBŠ1iÉŒ6pZa›MSÅîl:ôšËħ 
Jþ}ÜÍÃÑ1˜´+$f̆\Ø$±)sæâ¼üõÅ‘Ï™Àd–ÚDM*Ì 
R¯èÕ¼£C†}— 
¸mݼž„ª1øL5E‰_ð7âHö:´¡`¼E[Ö<BJüR’½Ê€「%8p 
LÄ] ¡û2ì––û}ðCÓîŽBáæeÎøëåZ§ " 
[Òºèf¯Œÿ»'L"g‚æ°C«G§¸IŸ‰ˆÚ‘_´G’.§b[•’KÛ0I¼û´)•Á 
é_「Ä*ÂÝp¯K%RÕlÍâ3÷À+\9rØ‚/˱V¨?Ù}ܨ›`l½î~RŽbŒ—w˜[£¦2™¾RÿÁeÎPbeö‘¿±¤N#Oåãº& 
Êc9OËbÿÊ3ÚV⛩²TPdx»ÉbèÁW8×MAà¥ó]D 
å™QØè’¿=Ÿ±­$BºÀŒdž\3âZ³‰×…׉…¹dؾíÂÂÎA^ǦèÕ`±³ï 
<µ¡QGÙY—-p÷›AÂ+pžD‘©ûÊÄÉ÷¢y×çÃt…ˆæîYiGÇÊAðÁô¡4YWoâ=ÊåÓñš‰Ö_」]½ÅÛô8ª<‡·gœ¡C`øm¼Á+¤·•Ï)ùïéÚTVî±0ME¡{Èÿ‚.G°Ágª¯‚É9&­©pöïMâF³°Ä}à–+iä0;ˆ7Y|Å4u¹SFŸwê¡ÑUIÃĤb†§JâY&_SæþJãi›©'È›XA’M[dY&²AbîAë[‚þ%\6¿ÿ=î…Èq‚ÌÉ$é「o 
àƒž「ªÔ~ºÐ¹ÿÔ_löfG½€oN(o§ƒþ7Í 
Âý0«F\!¡Ä¹\ÙoÑ,¼W™´CC#mà] 

** ------沒關係,找出問題所在。如果你在window和linux上打開同一個文件,它們看起來還是不一樣的。當我打開新文件linux時,我在Windows上打開舊文件。

+1

有什麼區別? – Minion91

+2

這是在MS Windows上嗎?如果是這樣,您必須在打開時複製文本/二進制模式。 – wallyk

+0

嘗試'memset(chunkToSend.chunkcontent.data,0,20000)' – Eun

回答

3

如果你想讀取和寫入文件,在Windows系統上的二進制,你需要指定,當你打開他們的閱讀:

file=fopen("source", "rb"); 

和寫作:

file=fopen("target", "wb"); 

此外,不要忘記檢查使用文件句柄之前打開是否成功。 (file != NULL

+0

感謝您的回覆,它仍然給我相同的結果 – help

+0

首先,你還沒有說過你使用的是什麼樣的系統。其次,在你的問題中,那些不是「文件」。這只是你用來查看它們的東西而剪下的那些垃圾。他們在哪裏一樣?它們在哪裏不同?使用適當的工具來比較二進制文件並找出。差異的最常見原因是換行符和空值(但可以避免使用二進制讀/寫)。最後,這是糟糕的代碼。你不檢查'fwrite'的返回來查看實際寫入的內容。編寫一個* small *程序來複制相同的數據並在這裏發佈整個事情。 –