有个txt文本文件,内容有5行,每行的字符数都不相同,目的是将最后一行的最后10个字符进行修改。
于是我想到用fseek函数,用法为fseek(fp,-10L,2).但是发现fseek函数只能读取第一行的字符,运行程序后发现后4行
字符都没了,只是对第一行的最后10个字符进行了修改。
这种情况应该怎么办呢?

解决方案 »

  1.   

    谢谢。怎么读取到缓冲区啊?我想直接用fopen,w的方式。
      

  2.   

    C++的话比较简单
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    ifstream fin("1.txt");
    string s1;
    while(getline(fin,s1));循环读取每一行,到最后一行时终止
    int size=s1.size();
    string s2=s1.substr(size-10);//获取最后十个字符
      

  3.   

    问题既然解决了就不说解决方法了
    就fseek()说说吧
    fseek函数一般用于二进制文件
    用于文本文件的时候要注意回车换行
    因为回车换行视为两个字符0x0D和0x0A,但是在定位的时候是安装一个字符处理的  0x0a
    可以考虑将文件整个读入内存。
      

  4.   

    刚才试了下,手动的创建一个txt,然后在内面手动输入5行数据
    然后fseek(fp,-10L,2)确实是定位到了第5行的倒数第10个字符
    LZ可以单独写一个小程序试试。看是不是你的文件本身数据写入的格式问题。
      

  5.   

    有可能是Unicode和多字节的问题
      

  6.   

    这些问题估计又是VS内面的。
    我是直接在VC++6.0下面测试的。
    VS在字符集上面的设置比较烦