gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:46:41 25 4
gpt4 key购买 nike

在 .NET 中有没有一种方法可以创建具有特定大小的文件而无需写入它?

我需要能够在特定位置书写,根据需要留出空白。实现这一目标的最佳方法是什么?

最佳答案

您可能不知道,但您可能会问这个问题“我如何在 .Net 中创建稀疏文件?”参见 this question

简短的回答是您不能使用托管代码创建稀疏文件,但是,您可以使用 native API——问题是稀疏文件“保持稀疏”。因此,如果您想稍后回填,最好不要这样做。你可以使用一个打开的 FileStream 并调用 SetLength() 如果你只是想避免将显式写出显式填充到你的文件的细节,O/S 仍然会用 NUL 填充你文件的“空”部分

public override void SetLength(
long value
)

已添加

请注意,此时文件不一定在磁盘上进行物理扩展。但是,如果您从“尾部间隙”读取,您将获得 NUL,如果您写入间隙,O/S 将用 NUL 回填中间空间。 NTFS 分别维护“有效长度”和“文件长度”。调用 SetLength 不会更改有效长度,只会更改文件长度。 “尾间隙”是跨越有效长度和文件长度的文件区域。另请注意,Windows 支持设置有效长度。写入尾部间隙或文件末尾也会更新有效长度。

因此,您可以通过不必立即实际扩展文件来避免性能下降,但迟早 O/S 将不得不花时间回填 NUL 填充 block (并将有效长度设置为新的write position), 写到tail gap时可能留下更小的tail gap。

请注意,当您扩展文件时从磁盘随机获取现有数据 block 将是一个安全问题——想象一下使用 SSN 获取工资单数据。

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

关于c# - 在 .NET 中创建固定大小的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com