1G左右TXT文件的读写有啥好方法没

selooloo 2010-03-09 07:22:53
要频繁对该文件进行读写,主要进行的是删除文件内容的操作。
删除文件我只知道读取到内存中,然后重写,但对1G这样的大文件,这样操作效率就太低了

各位有啥好方法没,100分送上
...全文
992 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
rome55 2010-03-14
  • 打赏
  • 举报
回复
内存 分割,然后截取读取
a7182388 2010-03-14
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 selooloo 的回复:]

貌似这个方法不错,C语言里怎么对数据库操作啊
[/Quote]
可用的数据库很多,可以用oracle数据库!再利用pro*c(c语言中嵌套sql语句)来对数据库进行操作!
RobinTang 2010-03-14
  • 打赏
  • 举报
回复
1G的txt记事本能打开么。。。?
学习了。。。。。。。。
icansaymyabc 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 selooloo 的回复:]
C语言里怎么对数据库操作啊……
[/Quote]

纯c语言可用的数据库多了,简单的有 B-Tree,商业级有 C-Tree,免费的有 MySQL ………… 当然要安装数据库然后用人家的开发接口来做。

更简单的话,不用现成的数据库,就按照教科书上给出的 B-Tree 原理自己实现一个简易的伪数据库也费不了多少事。
honghu069 2010-03-11
  • 打赏
  • 举报
回复
引用 33 楼 shallowlong 的回复:
1G的txt前所未有= = 开眼了。


把1~20的全排列保存到txt里
绝对有1G
buptzwp 2010-03-11
  • 打赏
  • 举报
回复
mark!
回复内容太短了!
yjukh 2010-03-11
  • 打赏
  • 举报
回复
有数据库效率会高一些
奚大绅士S11 2010-03-11
  • 打赏
  • 举报
回复
1G的txt前所未有= = 开眼了。
kakam 2010-03-10
  • 打赏
  • 举报
回复
引用 1 楼 bitxinhai 的回复:
可以试试文件内存映射。。。。

这个不错
ithiker 2010-03-10
  • 打赏
  • 举报
回复
内存映射 .............
aozhi 2010-03-10
  • 打赏
  • 举报
回复
改成ISAM文件吧。
lianyi68 2010-03-10
  • 打赏
  • 举报
回复
learning。。。
赵4老师 2010-03-10
  • 打赏
  • 举报
回复
也可以考虑把TXT文件的内容导入到数据库中,然后操作数据库。
SuperLy 2010-03-10
  • 打赏
  • 举报
回复
读写超过1G的大文件,怎么都快不了多少(当然,部分读写除外);
所以,建议拆解大文件,每个小文件最多几十兆(或更小),那么就快多了;
而且,内存映射也不是万能的,一个进程的可映射内存空间是相当有限的,尤其是加载DLL较多的时候;我们就经常遇到,映射超过250MByte以上的空间频繁失败的情况,更不用说映射高达1G的内存文件了,基本上100%失败(想象一下要找到一个大小为1G的连续空间,在一个加载众多DLL的进程中,那是多么困难),最后改成64MByte映射才没有失败的情况出现了。
chizhaolin 2010-03-10
  • 打赏
  • 举报
回复
学习了!!!!!!!!!!!!!!!!
james_hw 2010-03-10
  • 打赏
  • 举报
回复
引用楼主 selooloo 的回复:
要频繁对该文件进行读写,主要进行的是删除文件内容的操作。
删除文件我只知道读取到内存中,然后重写,但对1G这样的大文件,这样操作效率就太低了

各位有啥好方法没,100分送上


将大文件拆成1M大小的小文件,今后修改只对小文件修改即可。我没研究过文件系统,不过问我的同事,据他了解,没有发现可以从中间修改文件内容的方法。(我以前用一个日志文件记录设备上发生的问题,后来发现随着文件的不断扩大,读写都容易出现问题,结果改成日志文件超过1M就启动新的日志文件,这样读写就比较稳定,修改也比较容易)
nisikawaguti 2010-03-10
  • 打赏
  • 举报
回复
学习了。。。。。。。
louyong0571 2010-03-10
  • 打赏
  • 举报
回复
又长见识了,以前还真不知道文件可以这样操作,谢谢各位了!
selooloo 2010-03-10
  • 打赏
  • 举报
回复
引用 29 楼 icansaymyabc 的回复:
只能用数据库作为工作时临时文件。

0 启动程序时读取并分析文本文件,生成中间数据库,主要是按一定策略将文本文件分块(例如每512字节1块或每个标点处1块或碰到回车换行就算1块)并建立索引,以便快速定位什么内容在磁盘上什么位置。这个过程1G的文件耗时2-5秒。
1 写的话就按块写到数据库中并进行索引。
2 读的时候先通过索引判断该文本是否在数据库中,以便决定从数据库中或源文件中读取。
3 关闭程序时整合数据库和源文件内容生成一个新文本文件。这个过程1G的文件耗时3-10秒。
4 删除源文件和中间数据库。
5 备注:数据块写到数据库中,但块索引需要用链表保存,使得插入和删除块特别方便。

貌似这个方法不错,C语言里怎么对数据库操作啊
r11222 2010-03-10
  • 打赏
  • 举报
回复
MARK !!!!!!!!!!!!!!!!!
加载更多回复(20)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧