C++ 文件流 删除文件部分内容

来源:百度知道 编辑:UC知道 时间:2024/06/23 20:35:22
一个文件中有多条类结构格式的信息,我想删除其中一条,想了个方式,就是把原文件中的内容复制到一个临时文件中,在复制到需要删除的那条信息的时候跳过,然后再把原文件清空,之后把临时文件中的内容完全复制回原文件。。可是我的程序根本没有任何效果,连用open打开临时文件,在临时文件不存在的情况下都不自动建立。。

void shanchuxzt() /************删除选择题*************/
{
fstream f,s;
xzt a;
int n;
cout<<"请输入所要删除的选择题序号:";
cin>>n;
while(n>xinxi1())
{
cout<<"您输入的试题不存在,请重新输入:";
cin>>n;
} /***以下为主体部分****/
s.open("lxzt.txt",ios::out|ios::trunc|ios::app); //以写方式打开临时文件lxzt.txt
f.open("xzt.txt",ios::in); //以读方式打开原文件xzt.txt
while(f.read((char *)&a,sizeof(a)))
{ //每从原文件读取一条信息便存入临时文件中,在n=0时跳过写入,从而达到删除的目的。
n--;
if(n!=0)
s.write((char *)&a,sizeof(a));
}
f.close(); //关闭文件流
s.close();
f.open("xzt.txt",ios::trunc|io

文件不是很大吧,你读文件的时候直接全部读到内存不就得了?然后重写原来的文件内容时把需要删除的内容不写进去就ok了..
速度肯定比你的两次文件操作要快

思路是完全正确的,做过相似的,呵呵

0000

fuyguy