当前位置: 技术问答>linux和unix
用c语言写copy文件函数,有何注意事项? up者有分
来源: 互联网 发布时间:2015-02-24
本文导语: 有一个带文件头的文件,现在要把这个文件的剩余部分copy成另一个文件. 我的做法是先获取源文件的大小,减去文件头长度,然后用一个for循环 fread/fwrite 但是在现场测试的时候发现,有些文件解包失败--解出来的文件大小...
有一个带文件头的文件,现在要把这个文件的剩余部分copy成另一个文件.
我的做法是先获取源文件的大小,减去文件头长度,然后用一个for循环
fread/fwrite
但是在现场测试的时候发现,有些文件解包失败--解出来的文件大小对了,但大概有一半的内容是垃圾.[fread没有判断是否失败.]
是不是我的思路有问题?
或者有什么命令能实现这个功能?
急啊.
我的做法是先获取源文件的大小,减去文件头长度,然后用一个for循环
fread/fwrite
但是在现场测试的时候发现,有些文件解包失败--解出来的文件大小对了,但大概有一半的内容是垃圾.[fread没有判断是否失败.]
是不是我的思路有问题?
或者有什么命令能实现这个功能?
急啊.
|
你的思路没错,我也写过类似程序,不过没碰到你的问题。
我觉得你呢问题出在这几方面:
1. 全、半角上,是不是文件头长度不对,多读或少读了。
2. 内存分配上,是不是有其他的操作更新了你fread的目标内存。
最后,建议你用read/write这种非缓冲的读写操作,因为在Unix中,这种读写比较可靠。
我觉得你呢问题出在这几方面:
1. 全、半角上,是不是文件头长度不对,多读或少读了。
2. 内存分配上,是不是有其他的操作更新了你fread的目标内存。
最后,建议你用read/write这种非缓冲的读写操作,因为在Unix中,这种读写比较可靠。
|
你是在 NT 下做的吗?
如果是,则因为 fopen 打开文件的时候,缺省为 ASCII 方式了。在ASCII 方式下,自动会将[回车]字符变成[回车]+[换行]。
查一下 fopen 的参考手册,设置成二进制文件,就不会有错了。
如果是,则因为 fopen 打开文件的时候,缺省为 ASCII 方式了。在ASCII 方式下,自动会将[回车]字符变成[回车]+[换行]。
查一下 fopen 的参考手册,设置成二进制文件,就不会有错了。