当前位置: 代码迷 >> C语言 >> 文本操作删除?
  详细解决方案

文本操作删除?

热度:215   发布时间:2008-04-23 10:55:00.0
eof好像在那个.h里面有定义,就是-1
单个文件在硬盘中不时连续的么???那为什么windows需要硬盘整理?
----------------解决方案--------------------------------------------------------
对于txt本身也不大.我向来是用'\0'结束的..而且文件是逻辑上得问题与物理储存无关...每次用来做数据处理都是用字符串概念..读到字符做不同处理...
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]SNAKEQX[/un] 在 2008-4-23 10:55 的发言:[/bo]

eof好像在那个.h里面有定义,就是-1
单个文件在硬盘中不时连续的么???那为什么windows需要硬盘整理?

有可能是不连续的 比如windows里文件有簇的概念,一个簇可能是4KB 就是说你的文件最少要占4个KB的空间 如果你是1B 那么分给你的也是4kb
如果你的文件是6KB 那么就要占用两个簇,这两个簇在硬盘上可能是不连续的。
windows的硬盘整理就是要把不连续的簇整理成连续的 否则在读一个文件的时候影响效率
当然硬盘和内存又是两个概念。LZ原意应该是一个很大的文件怎么删除其中的一小块
当然你全拿到内存中修改好放进去是个方法 但影响效率 但怎么直接删除呢 我还没想清楚 咋就没fdel这个函数呢...
期待高手
----------------解决方案--------------------------------------------------------
csdn上查到的 几乎都是读到内存处理的方法
没有简单的方法删除字符,方法就是,从要删除的位置开始,将字符一个一个的向前复制,然后将文件长度改短,对了再说一句,改短文件时没有标准的,每一种平台都有自己的实现。
----------------解决方案--------------------------------------------------------
我觉得,即使是由FDEL这个函数,他的原理也都是先拿到内存中再改,如果是我编写才操作系统,我绝对不允许操作系统以外的任何软件直接访问硬盘:)

况且,直接修改文件的话,使CPU对硬盘的操作,这种数据交换非常慢,反而会影响效率把:)

我新手,以上只是自己的分析。有错误请指出,并请谅解:)
----------------解决方案--------------------------------------------------------
他拿到内存的数据肯定和我们的不一样吧 我们拿的比较大哦 这点我也不是太清楚 但人家的读写是汇编的接口 肯定比我们这几个api要快的多
windows上好像不允许程序直接访问硬盘 其实它提供的api也是在他的监视之下嘛 在人家的地盘上混还不是人家说啥你就得做啥
linux上有工具可以 甚至可以读写mbr 不过必须有权限的
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]hao0716[/un] 在 2008-4-23 12:21 的发言:[/bo]

csdn上查到的 几乎都是读到内存处理的方法
没有简单的方法删除字符,方法就是,从要删除的位置开始,将字符一个一个的向前复制,然后将文件长度改短,对了再说一句,改短文件时没有标准的,每一种平台都有自己的实现。 ...

我没看见过有向前复制的函数  我试验过 先输入一个字符串进入文件 ,在输入一个字符(想替换里面的某个字符),最终没任何反应
   那我问它怎么会有向前复制的功能即我上面说的替代 ?
----------------解决方案--------------------------------------------------------
你要对
你要对txt里的内容指针重定位!用指针操作
----------------解决方案--------------------------------------------------------
嗯。这种问题我也见过。
----------------解决方案--------------------------------------------------------
我的实现方法是……将文件再重新写到另外一个文件里面去,删掉的部分不写,然后重命名……Orz……至于硬盘怎样效率怎样……就不是我们考虑的范围了吧……
PS 原来写过这样的程序。就是用的这样变通的方法……不过是读取删除点后面的所有内容存到另外的文件中,然后,向前覆盖……MS不慢的……

如果是写编辑器要注重效率,还是希望能一次读一小块,用合理的数据结构来做……
----------------解决方案--------------------------------------------------------
  相关解决方案