首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何调整文件的大小,“裁剪”它的开始?

如何调整文件的大小,“裁剪”它的开始?
EN

Stack Overflow用户
提问于 2013-04-10 10:05:45
回答 2查看 313关注 0票数 2

我正在使用C#实现一个基于文件的序列化对象队列.

  • Push()将一个对象序列化为二进制,并将其附加到文件的末尾。
  • Pop()应该从文件的一开始就反序列化一个对象(这部分我已经开始工作了)。然后,反序列化部分应该从文件中删除,使下一个对象成为“第一个”。

从文件系统的角度来看,这仅仅意味着在磁盘上复制文件头几个字节,然后移动“文件的开始”指针。问题是如何在C#中实现这一点?有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-11 00:13:34

我看得最简单

( 1)源源不断地输出(就像日志一样,将其转储到文件中),

(注:您需要一些分隔符和“一致格式”的“文件”-基于您的数据)

)和后面的流(从一开始就读取文件,一次读取,然后处理w/o删除任何内容)。

那会很好,FIFO (先到先出)。

所以,我的建议--不要试图通过删除、跳过等方法来优化这一点(而是重新组合并使用更多的文件。

3)如果您担心事情的规模,那么只需将其划分成足够小的文件,例如每100或1,000 records (取决于,做一些计算)。

您可能需要在这里创建某种“虚拟器”,它映射文件,跟踪您的“数据库”,如果它是多个文件的话。最简单的方法是只使用文件系统和检查文件时间等,或者添加一些基本代码来改进它。

但是,我认为如果您必须确保'transactions‘,那么您可能会遇到问题--也就是说,如果事情失败了,那么您需要跟踪文件的关闭位置、回溯等。

这可能是个问题,但如果真的有必要(有多重要),你最好知道。您可以始终工作“每个文件”和每个较小的文件。如果失败,回滚并再次执行文件(或日志问题)。如果成功,您可以删除文件(成功后)并继续这样下去。

这是一种非常“手工制作”的方法,但应该让您使用一个简单且不太苛刻的解决方案(如您所描述的)。或者其他类似的东西。

我应该加上..。

您还可以省去一些麻烦,并使用一些可移植的数据库来实现该功能或类似的功能。这完全是基于手工编码的想法--一种最简单的解决方案(我们可能会想出更聪明的方法,但迟到了--这就是我所拥有的)。

票数 1
EN

Stack Overflow用户

发布于 2013-04-11 00:20:06

文件不是那样工作的。你可以剪短结束,但不能从开始。为了在开始时修改一个文件以删除内容,您需要重写整个文件。

我希望你会想办法解决你的问题。但是,线性文件完全不适合表示FIFO队列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15922823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档