【问题标题】:How to create an empty file of the specified size in Windows by C++ or C or C#? [closed]如何通过 C++ 或 C 或 C# 在 Windows 中创建指定大小的空文件? [关闭]
【发布时间】:2017-06-29 14:10:43
【问题描述】:

如何用C++或C或C#在Windows中创建一个指定大小的空文件?

这个文件不占用磁盘空间,打开文件,什么都没有。 但文件在文件属性中有字节数。

For example--

【问题讨论】:

  • 不包含任何内容,但仍声称有大小......听起来像“稀疏文件”。我自己从来没有搞砸过,但你可以谷歌它并尝试你找到的东西。祝你好运。
  • “打开文件,什么都没有”是什么意思?文件属性中显示的字节数是您打开文件时找到的字节数......当然,除非文件有一个或多个备用流。您是在谈论具有备用流的文件吗?
  • 您可以简单地使用 SetFilePointer() 寻找所需的 EOF 位置并调用 SetEndOfFile()。这会在 NTFS 文件系统上创建具有所需大小但没有分配集群的文件。读取这样的文件会产生二进制零。
  • @HansPassant:我很确定空间将被分配,除非您明确地使文件稀疏。它不会被抢先清零,但会被分配。 (我猜,如果您已将其打开,此行为可能会受到压缩的影响。)
  • 嗯,我 100% 确定它不会。易于测试,以这种方式创建一个 100 GB 的文件。只需要几分之一秒。

标签: c# c++ c windows


【解决方案1】:

你可以在 C++ 中这样做:

#include <iostream>
#include <fstream>
#include <vector>

int main()
{
    std::vector<char> empty(1024, 0);
    std::ofstream ofs("ouput.img", std::ios::binary | std::ios::out);

    for(int i = 0; i < 1024*300; i++)
    {
        if (!ofs.write(&empty[0], empty.size()))
        {
            std::cerr << "problem writing to file" << std::endl;
            return 255;
        }
    }
}


在 c#: 中制作 2GB 的文件: 只需创建文件,寻找适当大的偏移量,然后写入单个字节:

FileStream fs = new FileStream(@"c:\tmp\huge_dummy_file", FileMode.CreateNew);
fs.Seek(2048L * 1024 * 1024, SeekOrigin.Begin);
fs.WriteByte(0);
fs.Close();

【讨论】:

  • 这样的文件不符合 OPs 规范,例如,它占用磁盘空间。
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
相关资源
最近更新 更多