在.NET中创建固定大小的文件

Art*_*nez 3 .net c# io

在.NET中是否有办法创建具有特定大小的文件而无需写入文件?

我需要能够根据需要在特定位置写入空白空间.实现这一目标的最佳方法是什么?

Gar*_*ker 8

您可能不知道,但您可能会问这个问题"如何在.Net中创建稀疏文件?" 看到这个问题

简短的回答是你不能使用托管代码创建稀疏文件,但是,你可以使用本机API - 问题是稀疏文件"保持稀疏".所以,如果你想稍后回填,你可能最好不要这样做.您可以使用打开的FileStream并调用SetLength()如果您只是想避免将明确填充文本写入文件的详细信息,那么操作系统仍将使用NUL填充文件的"空"部分

public override void SetLength(
    long value
)
Run Code Online (Sandbox Code Playgroud)

添加

请注意,在此实例中,该文件不一定在磁盘上进行物理扩展.但是,如果你从"尾部间隙"中读到,你将得到NUL,如果你写入差距,O/S将用NUL回填中间空间.NTFS单独维护"有效长度"和"文件长度".调用SetLength不会更改有效长度,只会更改文件长度."尾部间隙"是跨越有效长度和文件长度的文件区域.另请注意,Windows支持设置有效长度.写入尾部间隙或文件末尾也会更新有效长度.

因此,您可以通过不必立即实际扩展文件来避免性能损失,但是O/S迟早必须花时间回填NUL填充块(并将有效长度设置为新的写入位置)当你写入尾部间隙时,可能会留下较小的尾部间隙.

请注意,在扩展文件时从磁盘获取现有数据的随机块将是一个安全问题 - 想象一下使用SSN获取工资单数据.

如果Windows添加了一个新的文件系统,确切的行为可能会变得更加复杂,但可能至少与NTFS上发生的情况一样好.