2012-10-08 57 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 *程序来复制相同的数据并在这里发布整个事情。 –