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

时间:2013-11-14 18:50:15

标签: c# .net io

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

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

3 个答案:

答案 0 :(得分:8)

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

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

public override void SetLength(
    long value
)

ADDED

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

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

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

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

答案 1 :(得分:1)

文件是磁盘上的一系列字节,它们以不同的格式具有不同的部分,如标题,正文等。因此,没有空文件这样的东西。因为每个字节都是保留的,每个字节(或Unicode中的两个字节)代表一个字符。即使在最初的状态。

因此,从技术上讲,你想要的是在磁盘上保留一定的空间,以便以后可以在那里写。

现在,如果您不希望该文件中包含可读或可见的字符,则只需创建一个填充了许多空白字符的文件即可。

答案 2 :(得分:0)

无论如何你需要写它

File.WriteAllText(path,new String(' ',size));

然后你可以seek到一个特定的位置然后写..