VB.NET用字节填充大文件

VB.NET用字节填充大文件,vb.net,file-io,Vb.net,File Io,我正在创建一个临时文件来存储一个无法放入内存的巨大矩阵。我想先将临时文件写入磁盘,这样我就可以在文件中找到一个带有流对象的位置。我已经知道我需要的确切尺寸了 比如说,写2G字节的零最简单的方法是什么 我试着一次只写一个字节,这真的很慢。我还尝试过编写字节数组chuncks,速度快得多,但我必须在数学方面做得很糟糕,因为我无法得到我期望的最终大小。这不是非常有效,但我在38秒内编写了一个2gig文件,首先在调试模式下编译 StringBuilder s = new StringBuilder();

我正在创建一个临时文件来存储一个无法放入内存的巨大矩阵。我想先将临时文件写入磁盘,这样我就可以在文件中找到一个带有流对象的位置。我已经知道我需要的确切尺寸了

比如说,写2G字节的零最简单的方法是什么


我试着一次只写一个字节,这真的很慢。我还尝试过编写字节数组chuncks,速度快得多,但我必须在数学方面做得很糟糕,因为我无法得到我期望的最终大小。

这不是非常有效,但我在38秒内编写了一个2gig文件,首先在调试模式下编译

StringBuilder s = new StringBuilder();
for (int i = 0; i <= 4000; i++) s.Append("0");

System.Diagnostics.Stopwatch t = System.Diagnostics.Stopwatch.StartNew();
using (StreamWriter file = new StreamWriter(@"c:\temp\temp.text"))
{
      for (long i = 0; i < 2147483648; i+= 4000)
         file.Write(s.ToString());
}
this.label1.Text = t.Elapsed.TotalSeconds.ToString();
StringBuilder s=new StringBuilder();

对于(inti=0;i这不是非常有效,但我在38秒内编写了一个2gig文件,首先在调试模式下编译

StringBuilder s = new StringBuilder();
for (int i = 0; i <= 4000; i++) s.Append("0");

System.Diagnostics.Stopwatch t = System.Diagnostics.Stopwatch.StartNew();
using (StreamWriter file = new StreamWriter(@"c:\temp\temp.text"))
{
      for (long i = 0; i < 2147483648; i+= 4000)
         file.Write(s.ToString());
}
this.label1.Text = t.Elapsed.TotalSeconds.ToString();
StringBuilder s=new StringBuilder();
for(int i=0;i有一种方法,允许您在文件的末尾之外设置任意位置。
如果在此位置写入简单字节,操作系统将调整文件大小,以允许在请求的位置写入

    Dim testfile as String = "d:\temp\testfile.bin"
    Dim fs As FileStream = File.Create(testfile)
    Dim utf8 As UTF8Encoding = new UTF8Encoding()
    Dim bw As BinaryWriter = new BinaryWriter(fs, utf8)
    bw.Seek(1500, SeekOrigin.Begin) 'only 1500 bytes just for test
    bw.Write(255)
    fs.Close()
具有一种方法,允许您在文件末尾之外的位置设置文件的任意位置。
如果在此位置写入简单字节,操作系统将调整文件大小,以允许在请求的位置写入

    Dim testfile as String = "d:\temp\testfile.bin"
    Dim fs As FileStream = File.Create(testfile)
    Dim utf8 As UTF8Encoding = new UTF8Encoding()
    Dim bw As BinaryWriter = new BinaryWriter(fs, utf8)
    bw.Seek(1500, SeekOrigin.Begin) 'only 1500 bytes just for test
    bw.Write(255)
    fs.Close()

不错!但是2GB对于BinaryWriter.Seek.Edit中的Int32 offset参数来说正好是一个字节太大了,不管怎样,因为它是偏移量,Int32.MaxValue应该正好是2GB。参数也可以设置为Current。所以,用Begin(从零开始)写入第一个字节,然后用Current(last write pos)写入另一个字节.Wow!这太完美了。我担心在一行(bw.write(255))中写入文件会花费太长的时间,但是,正如您所说,操作系统对其进行了优化,使其在一瞬间完成。这太完美了。它有一个重载,用于写入用整数填充的文件(在我的例子中为零)。我能够得到我需要的确切大小。很好!但是2GB对于BinaryWriter.Seek中的Int32 offset参数来说正好太大了一个字节。编辑,无需担心,因为它是偏移量,Int32.MaxValue将正好是2GB。参数也可以设置为Current。因此,使用Begin(从零开始)写入第一个字节,然后用Current(last write pos)写另一个。哇!这太完美了。我担心在一行(bw.write(255))中写文件会花费太长时间,但不知怎的,就像你说的,操作系统优化了它,所以它可以在一瞬间完成。这太完美了。它有一个用整数(在我的例子中是零)填充文件的重载。我能够获得所需的确切大小。注意,您还可以获得O/S支持以最初创建大文件。请参阅
fsutil file createnew
。注意,您还可以获得O/S支持以最初创建大文件。请参阅
fsutil file createnew