【发布时间】:2015-04-01 19:18:46
【问题描述】:
我一直在研究这个。还没有找到关于它的答案。
是否可以在不覆盖文件的情况下插入/删除数据?我知道有File.AppendAllText(Path, "Content"); 但是删除它呢?
例如。
我们有一个"Things.CB" 文件。这个文件的内容是:
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
我想删除 7 和 4。
我用我的程序打开文件,然后继续将这个数字读入List<String>。
发生这种情况时,在对列表执行RemoveAt() 后,我必须序列化文件,然后使用BinaryWriter 或streamWriter 保存它。
在这个过程中,我们做了两件事,读取整个文件,反序列化然后序列化它,以便我们可以再次写入。
我想知道是否可以只打开文件,检查文本的位置,然后删除/插入并保存它而不序列化或读入列表/数组/等...
【问题讨论】:
-
您准备好进入非常低的级别并篡改硬盘驱动器上的集群了吗?您可以修改 FAT (NTFS..whatever),以便您基本上将文件分段,移动到您要删除的部分。然后,除了 FAT(或在您的特定操作系统中调用的任何文件分配表)之外,您绝对没有更改任何磁盘内容
-
通过随机访问文件,您可以覆盖内容(例如,使用空格),但不能删除(制作一个 20 字节的文件一个 16 字节的,在“删除”4 和 7 之后)。而且,IIRC,随机访问只会加载整个扇区或内存,进行更改并再次写回......(不,您不能部分写入扇区)。
-
我不确定我是否准备好了,但我可以开始学习,是否可以使用 C# 来做到这一点?还是我必须使用像 c++ 这样的低级语言?