那位高手在WINCE下处理20M左右文本文件的经验(读写文件,重点是写)。解决办法

那位高手在WINCE下处理20M左右文本文件的经验(读写文件,重点是写)。
现在WinCE想开发一个文本编辑器(C#语言),用现成控件TextBox大于65KB就会失败,已经开发2.0版本是画出文件内容,只能查看不能修改。现在开发3.0版本,要求能查看,能修改。请各位多帮助。

------解决方案--------------------
在 CE 下处理大文本文件是比较麻烦的,不管是哪种语言都一样

建议分块处理:将文本文件内容分成如 2K 的块,每次在块中进行处理。
------解决方案--------------------
应该采用内存映射吧,这样读写文件就是直接操作内存。
系统负责处理数据的缓存,写入以及内存分配释放,可以提高读写速度。
------解决方案--------------------
不过没这方面的经验,还是帮顶吧。呵呵。
------解决方案--------------------
专门的文本编辑器都是采用的“显示那段就读哪段”的方式

通过显示框大小,字体,和滚动条位置,动态计算屏幕所显示的内容在文件的偏移和长度,然后通过文件操作的方式打开,读取需要的内容到内存。 保存的时候也同样要这样做。
读文件调用底层的api:open,seek,read,write会比c#里面直接用流方式操作高效
------解决方案--------------------
内存映射
------解决方案--------------------
探讨

专门的文本编辑器都是采用的“显示那段就读哪段”的方式,
只读是比较简单的。但是对写,一个10W行的文件(每一行的内容虽然不多),修改10W行文件中的某一行,比喻说第5W行,怎么保存,删除了第5W行,怎么保存?对于效率有一定的要求。

------解决方案--------------------
有木有试过通过逐行读取的方式来操作。比如说,10W行的数据,读取第5W行的数据,把指针跳到第5W行。要修改的话,试试把你修改的内容在原文本的头尾位置记录下来,然后把这段数据删掉,再把你的数据插入到记录的开始位置。这个方法木有试过,LZ可以试试看行不行
------解决方案--------------------
探讨

对于大文件度的问题比较好解决,我在打开时做一个文件地图,事先做一些标记,这样在读的时侯,就能比较快的处理了。但这个方法好像对于写不顶用。写我只是暂时想到了一个有点业余的做法,把大点文件在打开时分割成一个小的文件,然后在编辑时操作的对象是这些小的对象,最后一次保存操作时,再把这些小文件拼成一个完整的大文件。但是我又考虑到这个方法可能不太合适,因为查看到网上在嵌入式环境下对于大文件的处理一般都是采用……

------解决方案--------------------
内存映射,与磁盘操作
------解决方案--------------------
1 内存映射
2 仔细想想fread的参数,为什么有个读取长度,就是针对你的这种需求,可以逐步读入,分批处理的。
------解决方案--------------------
分页吧。。
------解决方案--------------------
用TextReader和TextWriter 一段一段读,
一下全读完再加载,肯定会死
------解决方案--------------------
没遇到过
------解决方案--------------------
先分块把 感觉最简单的方法了
------解决方案--------------------
一个曾经考虑过但没去仔细验证的方案:
操作过程中,不直接写原始文件,记录成del和insert操作步骤,保存时,分块读入文件,应用所有的操作(可优化),并写入新生成的文件,删除原文件

内存映射无法解决文件写操作的效率问题的,但可以使得编码变得简单

------解决方案--------------------
20M的文本,不会继续增大的话,可以考虑内存映射;否则,分块算了。
------解决方案--------------------
这个我也遇到过,好像没什么好办法!
------解决方案--------------------
如果是文本文件,修改后保存必须重新写入整个文件,至少修改之后的内容必须写入。除非你修改的内容和原内容长度完全一样。
写入的时候可以优化一下,根据文件长度的变化将没有变化的文件内容逐块复制。
------解决方案--------------------
路过不懂学习帮顶,这个问题确实没有遇到过 但是看了上面的东西 突然发现其实做标签的方式也是可以的比如说vs里面的行号 每次修改了以后前面就会变颜色 你也可以用标记符记录下某一段的标识 然后只修改某一段也可以一段一段的保存 这个应该还是有可行性的....每次操作都会有回车 回车的时候就保存这一段内容到一个临时文件上或者一个标记片段上...最后在组合 或者到了一定行数组合一次.....
------解决方案--------------------
我在CE5上实现过,用内存映射,比你这个大十倍,一般能到四五百M,最多是几G,没什么问题。
------解决方案--------------------
分块读取
根据当前屏的行数,每行要显示的字节数分配相应的内存(buf),然后将文件读取到内存(buf)
如果存在字符转换,还要考虑字符转换。
根据系统的性质,可以考虑添加书签等操作