关于fseek和文件"ab+"打开方式的问题
这是在写一个文件的的时候发生的一个错误,代码如下
#include<stdio.h>
#include <errno.h>
#include <string.h> int main(){
FILE * fp; char t = ;
for (int i = ; i <= ; i++)
{
fp = fopen("test.txt" , "ab");
t = i;
if ( == i)
continue; if (fseek(fp, (i - ) * , SEEK_SET))
printf("i = %d errno = %d(%s)",i, errno, strerror(errno));
printf("当前位置:%d ", ftell(fp) / );
printf("文件结束符%d\n", feof(fp));
for (int j = ; j < ; j++)
fwrite(&t, , , fp);
fclose(fp);
}
fp = fopen("test.txt", "ab");
t = ;
fseek(fp, ( - ) * , SEEK_SET);
printf("当前位置:%d ", ftell(fp) / );
printf("文件结束符%d\n", feof(fp));
for (int j = ; j < ; j++)
fwrite(&t, , , fp);
fclose(fp); return ;
}
按照常理来说,这样的写入文件会按照顺序写入100个1024的字符,但是结果是在写到55号块(对应ASCI字符37)时并没有写入而是直接写入56号块(38) ,37是写在文件的最后的。
打印出来的ftell和feof()的信息是这样的
...
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
...
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
当前位置: 文件结束符0
也就是说每次fseek其实是改变了文件指针,但是feof()却始终为0;原因如下;
关于fseek和文件"ab+"打开方式的问题的更多相关文章
- Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等
此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能. 如图: 代码: public class GridViewFile ...
- CentOS 6.4 文件夹打开方式
CentOS 6.4 文件夹打开方式 在CentOS 6.4中,双击文件夹,默认会在新窗口中打开文件夹,没有路径.前进.后退这样的按钮,如果一个文件夹的路径很深,则需要打开n多的窗口才能找到最终想要的 ...
- 通过Powershell修改文件默认打开方式
修改原理 详情: Windows下通过注册表修改某个类型文件的默认打开方式和文件图标 脚本详情: Github:Change_default_programs.ps1 描述: 至少在Windows10 ...
- MyEclipse设置文件默认打开方式
MyEclipse设置文件默认打开方式 依次点击: [MyEclipse]-> [Preferences] -> [General] -> [Editors] -> [File ...
- 删除win10系统下文件默认打开方式的关联-win10配置
现象 文件默认打开方式错误 链接到老的打开软件 无法图形化重定义关联软件 文件图标关联异常 1. 打开注册表编辑器 win + R regedit 2. 修改注册表 找到以下注册表路径,找到指定的文件 ...
- sublime 设置文件默认打开方式
win7,sublime text 3 无法关联文件 删除 HKEY_CURRENT_USER\Software\Classes\Applications下的Sublime_Text.exe项.你就发 ...
- 重新关联bat文件的打开方式为系统默认方式
为什么“BAT”扩展名的默认打开方式:显示出来的居然是“%1”这么一个怪异的东东,具体在什么位置的? c:\windowssystem32\command.com修复bat关联,打开command.c ...
- C++文件读写 打开方式等比较全
要求:掌握文本文件读写的方法了解二进制文件的读写方法 C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流 //创建一个文本文件并写入信息// ...
- Linux 设置文件默认打开方式
比如说我安装了一个绿色版的sublime(.tar解压出来的不是.deb) 但是现在我右键不能打开,不能添加为默认打开方式...这个时候就比较尴尬了... 我总不能每次都cd到安装目录下然后termi ...
随机推荐
- 记事本源代码 python3
已实现基本功能,显示行号功能暂时实现不了(后面学会了再加,右下角可以实现定位光标所在行.列) 可能会有些bug 1 from tkinter import * from tkinter.message ...
- 那些年,我们开发的接口之:QQ登录(OAuth2.0)
那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wu-jian 前言 开发这些年,做过很多 ...
- HDU 4597 Play Game 记忆化DP
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Proble ...
- 有关OpenCV1.0中GUI命令的几个函数学习总结
1.修改窗口背景色或者光标形状 在OpenCV1.0版本利用函数int cvNamedWindow( const char* name, int flags )初始化创建一个窗口后,窗口的背景色是灰色 ...
- Tomcat源码分析——SERVER.XML文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...
- 注销CA登录
//移除CA缓存HttpCookie ticketCookie = Request.Cookies[FormsAuthentication.FormsCookieName];FormsAuthenti ...
- 从零开始安装Hadoop视频教程
从零开始安装Hadoop视频教程 Hadoop 是一个能够对大量数据进行分布式处理的软件框架,用这种技术使得普通的PC服务器甚至一些近过时的服务器也能够发挥余热,组成大型集群系统,由于它的可伸缩性能够 ...
- 分区的4k对齐
4k对齐的原理 4k对齐的磁盘性能比非对齐的大致提升在5%-10%左右. fdisk -H 224 -S 56 /dev/sdx #创建分区 fdisk -lu /dev/sdx #验证对齐
- 【c实现,vc6调试通过】给出一字符串指针,计算出字符串指针中单词数
#include <stdio.h> /* 给出一字符串指针,计算出字符串指针中单词数, 单词不包括'.',',',';','?','_','"',由0-9数字或26个字母组成 ...
- 何时使用 Em 与 Rem
原文 http://www.w3cplus.com/css/when-to-use-em-vs-rem.html 你可能已经很熟练使用这两个灵活的单位,但你可能不完全了解何时使用rem,何时使用 ...