关于利用fgets()改变文件指针位置再利用fprintf()更新文件数据的一些小疑问求教

问题描述

关于利用fgets()改变文件指针位置再利用fprintf()更新文件数据的一些小疑问求教

下面便是一个更新卡信息文件数据的函数updateCard

int updateCard(const char* CardPath,const Card* pcard,int nIndex)
{//更新卡信息文件中的数据,CardPath为文件路径,pcard为指向要更新的卡信息结点的指针,nIndex为卡信息在文件中的索引号(即在卡信息文件中的行数)
    FILE* fp = NULL;
    long lpostion = 0;
    char string[100] = {0};
    char startTime[TIMELENGTH]={0};
    char endTime[TIMELENGTH]={0};
    char lastTime[TIMELENGTH]={0};
    int ncount = 0;
    if((fp = fopen(CardPath,"r+")) == NULL)
        return FALSE;
    while(ncount++<nIndex){
        fgets(string,100,fp);
        printf("%p
",(int*)fp);
        lpostion = ftell(fp);
    }
    printf("%p
",(int*)fp);
    //将时间转化为字符串
    timeToString(pcard->tStart,startTime);
    timeToString(pcard->tEnd,endTime);
    timeToString(pcard->tLast,lastTime);
    fseek(fp,lpostion,0);
    printf("%p
",(int*)fp);
    //向文件中写入数据
    //格式为:卡号##密码##状态##开卡时间##截止时间##累积金额##最后使用时间##使用次数##当前余额##删除标识
    fprintf(fp,"%s##%s##%d##%s##%s##%0.1f##%s##%d##%0.1f##%d
",pcard->aName,pcard->aPwd,pcard->nStatus,
        startTime,endTime,pcard->fTotalUse,lastTime,pcard->nUseCount,pcard->fBalance,pcard->nDel);
    fclose(fp);
    return TRUE;
}

关于卡信息文件
截图如下,每条卡信息占据一行

主要疑问如下:
既然已经利用fgets改变了文件指针位置,如果不利用fseek及ftell函数为何无法更新卡信息文件中的数据?
以下两个截图分别是利用fseek及ftell等函数和不利用的文件中数据截图
(以更改第二行卡号为qq的数据为例,注意##0##到##1##的转变)
1.更新成功!

2.更新失败!

解决方案

fread返回0或者不是期望的值,那么是否会读取到数据(如果数据没有读完的话),并改变了文件的指针位置?

解决方案二:

求解答啊呜呜呜呜难道又这样沉了么

时间: 2024-11-02 20:37:25

关于利用fgets()改变文件指针位置再利用fprintf()更新文件数据的一些小疑问求教的相关文章

carchive-CArchive的文件指针位置和CFile的文件指针位置是一样的么?

问题描述 CArchive的文件指针位置和CFile的文件指针位置是一样的么? void Add::OnClickedIdbAdd() { // TODO: Add your control notification handler code here UpdateData(); if (!m_aComp || !m_aEng || !m_aMath || !m_aGym || m_aName=="" || m_aSno=="" || m_aMajor=="

c语言-C语言中A文件定义的文件指针,如何才能在B文件中也可以写入信息

问题描述 C语言中A文件定义的文件指针,如何才能在B文件中也可以写入信息 image.c和rtp.c都不是主函数,在image.c中定义了一个文件指针,但我想把rtp.c中的信息写入这个文件.简单就是在A文件中定义了一个指针文件,想把B文件中的信息写入指针文件.你可能问我为什么不直在B文件中定义,因为也要写入A文件中信息,像我之前写的运行时会提示rtp.c中的文件指针是未定义的标识符. 应该怎么写才是正确,麻烦知道的人给点指导,谢谢 解决方案 通过extern在rtp.c中声明该文件指针为外部指

C#Winform程序上传文件到数据库再下载打开时文件损坏

问题描述 C#Winform程序上传文件到数据库并加密,再下载到本地打开时文件损坏打不开了.上传officeword2003文件没有问题,2007文件会提示[无法打开OfficeOpenXML文件xxx.docx,因为内容有错误.],详细信息是[文件已损坏,无法打开.].实际上office还是能够修复打开的,不过要多点2下鼠标.如果上传压缩文件就打不开了.另外,网上说字段类型应该用IMAGE,我试过了,也不行.我用的是ntext.跟加密也没关系.哪位给解决下//把文件写入数据库FileStrea

Win10相机文件储存位置在哪修改

Win10系统上有个Metro风格的相机应用,它与我们安装摄像头后在我的电脑里面看到的那个可不一样.有的用户在拍照完后,找不到自己拍摄的照片,而有的用户则想改变相机文件的储存位置.这篇教程将帮助大家解决这些问题.   一.Win10相机文件储存位置   通过Win10相机程序得到的照片文件,默认保存在C:用户当前用户图片本机照片中.   二.更改Win10相机文件储存位置     打开上面提到的文件夹,对着本机照片文件夹单击鼠标右键,菜单中选属性,在本机照片属性对话框,点击选择"位置"

hosts是什么文件 host文件存放位置

hosts是什么文件,host文件存放位置,其实Hosts是一个没有扩展名的windows系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析. Hosts文件对于一般用户可能都不会去注意到,在我们一般上网等应用中默认设置就好,不过某些

c++ fstream 文件读写-C++ fstream读写文件 文件指针

问题描述 C++ fstream读写文件 文件指针 ifstream file; ....... //中间有读写文件操作 int i; i = file.tellg(); file >> str1; file.seekg(i); file >> str2; 请问 这两个 str为什么不一样 我确认 在file>>str1和file>>str2这两个语句之前 seekg() 返回的值是一样的 解决方案 读写文件(fstream)用fstream对二进制文件的读

QQ聊天记录在哪个文件夹 QQ聊天记录文件夹位置分享

给各位QQ软件的用户们来详细的解析分享一下QQ聊天记录所在的文件夹的位置. 位置分享:   方法一:聊天记录文件夹是要保存在电脑硬盘上的,只要知道聊天记录保存在电脑哪个文件夹内,"qq聊天记录在哪个文件夹怎么打开"这个问题自然就迎刃而解.紧接着删除对应文件夹,记录自然就清空了.首先要知道QQ程序所在的路径,例如QQ的路径是:C盘-Program Files-Tencent-qq,那么,就根据这一路径打开它,就可以找到用QQ号码命名的那个文件夹了.   方法二:qq聊天记录在哪个文件夹怎

循环处理文件,并更新Web数据

问题描述 jsp文件中,有如下java代码RealNameSearch_Serviceservice=newRealNameSearch_Service(url,qname);Stringresult=service.getRealNameSearchSOAP().search(starttime,finishtime,number_input,phonenum,addr,ip,port,select);其中search()是一个WebService接口,返回一个字符串是一系列文件的第一个文件名

VS2005怎样改变从源代码服务器上获取下来的文件的存放位置?

问题描述 VS2005怎样改变从源代码服务器上获取下来的文件的存放位置?重装系统后,从服务器上重新获取,代码文件存放的位置不是我原来在本地的存放位置我把我获取到的全删了重新获取可是已经没有了存放位置的选择,自动又存放到了刚才的位置请问该怎样解决?谢谢!源代码管理我用的是TeamExplorer 解决方案 解决方案二:在线等结贴解决方案三:vs没有,你的代码管理器有的,解决方案四:找了找不到不知道在哪里?解决方案五:获取单个文件可以指定位置吧?获取的时候,先只获取解决方案文件.然后在vs2005中