读书人

MFC CFile 对文件操作的有关问题 急

发布时间: 2013-10-17 17:26:17 作者: rapoo

MFC CFile 对文件操作的问题 急求解决办法 在线等
问题描述:
操作的文件是一个类似监控日志的txt文件—iary.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

读书人网 >VC/MFC

热点推荐