QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1380|回复: 6

如何用文件低级IO函数,实现一个文件删除中间一部分的操作?

[复制链接]
发表于 2005-3-1 15:03:42 | 显示全部楼层 |阅读模式
如题,兄弟是菜鸟,请各位高手指点!给出原码或实现流程都行!
发表于 2005-3-2 06:19:35 | 显示全部楼层
首先你必须知道具体是从那一byte到哪一byte要删除。
假设那个文件有50byte大,你要把从10到20byte之间的资料删除:

int deleteStart = 10;
int deleteEnd = 20;

FILE * inFile = fopen("myfile", "rb" );
FILE * outFile = fopen("myNewFile", "wb" );
void *buffer = malloc(1);

fseek(inFile, 0 ,SEEK_END);
long fileSize = ftell (inFile);
rewind (inFile);

long byteRead = 0;
while(true)
{
    if (byteRead == fileSize)
        break;
    fread(buffer, 1, 1, inFile);
    byteRead++;
    if (byteRead < deleteStart || byteRead > deleteEnd)
        fwrite(buffer, 1, 1, outFile);
}

fclose(inFile);
fclose(outFile);

重来没有这么做过,不知道对不对... :D
回复

使用道具 举报

发表于 2005-3-3 23:02:10 | 显示全部楼层
楼主的意思是对一个文件进行操作吧?
你可以open两次文件,将文件指针一个移到要写的地方,一个移到要读的地方。
fork一个子进程
一个读,一个写
这样就可以并行了
回复

使用道具 举报

 楼主| 发表于 2005-3-7 16:18:25 | 显示全部楼层
兄弟说的对,不过问题的关键不在此。
可以使用的函数有:open,close,lseek,read,write.
如果文件有三行,内容如下:
A
B
C
如果想把B删掉,可以先定位到C,读C写到B。这样文件就变成了
A
C
C
我想要的是
A
C
请问,各路高手,如何做?
回复

使用道具 举报

发表于 2005-3-9 16:35:20 | 显示全部楼层
那就先把A读到另外一个文件,把指针定位到C,再读不就完了?

大不了随后把源文件删掉,目标文件改个名字,当然得先确认一下所有的操作都正确执行了。
回复

使用道具 举报

 楼主| 发表于 2005-3-11 13:37:30 | 显示全部楼层
这位兄弟说的对,我在想有没有更简单的办法呀!比如Kedit,kwrite等在做同样事时是如何做的呢?有没有兄弟分析过呀?
回复

使用道具 举报

 楼主| 发表于 2005-3-16 09:19:05 | 显示全部楼层
为什么没人回答俺的问题呢!!!!Linux下有一个截断文件的函数,调用这个函数也是可以做到的,但我就是想知道一般的处理软件是如何做到的?哪位兄弟能帮帮忙呀!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 12:39 , Processed in 0.048955 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表