首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC CFile 对文件操作的有关问题 急求解决方法

2013-10-17 
MFCCFile 对文件操作的问题急求解决办法在线等问题描述: 操作的文件是一个类似监控日志的txt文件(Diary.tx

MFC CFile 对文件操作的问题 急求解决办法 在线等
问题描述:
 操作的文件是一个类似监控日志的txt文件(Diary.txt),为了记录打印机的打印行为。现在我希望每次往这个文件中写入内容的时候都去检查一下,如果属于同一个任务(ID相同)的文本,就去在文件中去替代之前的这行文本。简单的说就是将文件中的文本去除重复的内容。
文件截图:
MFC  CFile 对文件操作的有关问题  急求解决方法

每行文本分别代表 打印任务ID,时间,打印文件名,打印机名,用户名,打印状态

其中打印任务的ID任何时候都是唯一值,不存在重复情况,上面的截图就是未经处理而存在重复的情况。如果两个任务的ID一样,那么这两个任务是同一个任务。

我的思路:

    每次将一个CString类型变量往文件中进行写入操作的时候[我用的是CStdioFile::WriteString(CString &str_write)]
都将文件从头到尾按行读一遍(ReadString(CString &str_read)),要写入的CString的格式是固定的,前面五个字符是任务ID,然后从每次读出来的str_read中取出前五位,和将要写入的str_write的前五位进行比较,也就是比较它们的ID是否一样,如果一样,那么就定位到相同ID处,用WriteString()在其之前写入这个CString,那么之前的CString就会被覆盖掉,因为CFile从前写入的话,会出现覆盖情况。这样的话 就会实现去除重复的文本。 
    这是我的想法,如果各位发现错误,或者有更好的办法的话,恳请告知。

代码:



大家从代码上应该能看出来,本人C++新手,很多问题不懂,这个错误也看不懂,但好像是发生在ReadString这个地方。
刚注册的账号,发了几个帖目前剩170分,全部送上。 CFile CStdioFile 文件操作 ReadString WriteString
[解决办法]
GetBuffer这个东西用不好很容易出错的
你用的地址引用  下面有个释放  上面还有用到 当然会崩溃了...

[解决办法]
你这是 顺序文件 不能直接替换的。 需要 一行一行 地复制(包括替换)到 一个 临时 文件。
如果是 随机文件 (一个一个记录), 就可以 替换 其中 一个 记录(就是一条固定长度的记录)。
[解决办法]
引用:
Quote: 引用:

GetBuffer这个东西用不好很容易出错的
你用的地址引用  下面有个释放  上面还有用到 当然会崩溃了...

 能说详细点吗 报错的那个截图 出错的那个filetxt.cpp这个文件我没有改动呀 
我大致的看了一下 我也没有去详细的分析,你先将错误定位到具体的行...
[解决办法]
rString里面有东西吗? 

[解决办法]
那就是读出来就不对了,
你到底是要解决方法还是找错误啊

CStdioFile file;
    file.Open("Diary.txt",CFile::modeReadWrite);
    CString str;
    while(true){
        file.ReadString(str);
        if(str.Left(str.Find(",",0))==CString("ID")){
            file.Seek(0,CFile::current);
            file.Write("ID............",strlen("ID.........."));
            break;
        }
    }
    file.Close();
[解决办法]
SeekToEnd然后写入。
然后读取之前应该SeekToBegin吧
[解决办法]
引用:
Quote: 引用:

那就是读出来就不对了,
你到底是要解决方法还是找错误啊

CStdioFile file;
    file.Open("Diary.txt",CFile::modeReadWrite);
    CString str;
    while(true){
        file.ReadString(str);
        if(str.Left(str.Find(",",0))==CString("ID")){
            file.Seek(0,CFile::current);


            file.Write("ID............",strlen("ID.........."));
            break;
        }
    }
    file.Close();


解决办法呀 

这段代码就是查到行  定位  然后替换  具体细节自己去修改
[解决办法]
搞那么复杂,xml
属性id,修改值
[解决办法]
参考Microsoft SDK\samples\winbase\IO\fWatch\*.*
[解决办法]
用INI文件来读写也容易。。
操作INI函数。。
GetPrivateProfileString

WritePrivateProfileString 

热点排行