使用fopen时应注意的问题
2006-03-10 17:15
363 查看
以前在windows下总喜欢使用CFile类来操作文件,最近改用fopen系列函数,却没想到一个不经意的问题让我调试了一整天。打开文件使用的代码如下:
FILE* fh = fopen("c:/filename", "r");
缺省情况下(当然可以进行设置),文件是以文本模式打开的,因为我们没有使用b标记。这个时候,如果文件数据中含有0x1a就有麻烦了。每当读到0x1a的时候,文件的位置会跳到4096(ftell返回的结果),如果文件小于4096字节的话,那么调用fgetc得到的结果是EOF。另外,ftell返回的结果也和文件的物理位置不一致,这使得我们在不自行跟踪读取进度的情况下,无法确定读到什么位置(调用ftell)以及还有多少字节可读(文件长度-ftell(fh))。所以,调用fopen的时候还是加上b标记为好(二进制模式)。文本模式的操作估计多用于stdin和stdout这两个特殊的文件句柄,因为这个时候0x1a相当于按键CTRL+Z。
FILE* fh = fopen("c:/filename", "r");
缺省情况下(当然可以进行设置),文件是以文本模式打开的,因为我们没有使用b标记。这个时候,如果文件数据中含有0x1a就有麻烦了。每当读到0x1a的时候,文件的位置会跳到4096(ftell返回的结果),如果文件小于4096字节的话,那么调用fgetc得到的结果是EOF。另外,ftell返回的结果也和文件的物理位置不一致,这使得我们在不自行跟踪读取进度的情况下,无法确定读到什么位置(调用ftell)以及还有多少字节可读(文件长度-ftell(fh))。所以,调用fopen的时候还是加上b标记为好(二进制模式)。文本模式的操作估计多用于stdin和stdout这两个特殊的文件句柄,因为这个时候0x1a相当于按键CTRL+Z。
相关文章推荐
- 使用fopen时应注意的问题
- 使用Rancher部署K8S时需要注意的软件版本问题
- ANDROID动态加载 使用SO库时要注意的一些问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- Hibernate使用二级缓存时,createSQLQuery需要注意的问题
- -Android开发中,使用线程应该注意的问题!
- Android分享链接使用ShareSdk需要注意的一些小问题
- 解决vs2015使用fopen、fprintf等函数报错的问题
- java 枚举使用中注意的问题
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
- ASP.NET MVC 3 使用页面缓存 OutputCache 需要注意的问题
- 数组与类使用PHP的可变变量名需要的注意的问题
- Select语句中使用FOR ALL ENTRIES IN需要注意的问题(转帖)
- 什么是“引用”?申明和使用“引用”要注意哪些问题?
- jquery parent()方法在table标签中使用需要注意的一个问题
- 使用linux的几个需要注意的问题(后续增补)
- SQL 在使用组合函数删除记录时要注意的问题
- IE8、IE7、IE6中使用getElementById需要注意的问题
- 使用JTip插件时需注意的一个问题
- 一定要注意使用代理服务器的安全问题