[code snippet] 生成随机大文件

code snippet 生成随机大文件

一个无聊的测试代码,因为要测试大文件的网络传输,就写了一个随机大文件生成脚本,做个备份。

基本上都是 GPT 生成的,哈哈。

C# 代码

csharp 复制代码
namespace ConsolePlayground;

internal class BigFileGenerater
{

    public async Task Run()
    {
        Console.WriteLine("大文件生成工具,输入要生成的文件大小,单位 GB");
        Console.WriteLine();
        var input = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(input))
        {
            return;
        }
        if (!double.TryParse(input.Trim(), out var size))
        {
            return;
        }

        if (size <= 0 || size > 1000)
        {
            throw new ArgumentOutOfRangeException("size");
        }
        var byteSize = size * 1024 * 1024 * 1024;

        var folder = Environment.CurrentDirectory;
        Console.WriteLine($"将在当前目录 {folder} 生成 {size} GB 的文件");
        Console.WriteLine("是否继续? Y/N");

        input = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(input))
        {
            return;
        }
        if (input.Trim().ToUpper() != "Y")
        {
            return;
        }

        Console.WriteLine("开始生成...");
        await Genetate(folder, byteSize);
        Console.WriteLine("结束生成");
    }

    private async Task Genetate(string folder, double size)
    {
        var file = Path.Combine(folder, $"TEMP_{DateTime.Now:yyyyMMddHHmmss.fff}.tmp");

        using var fileStream = new FileStream(file, FileMode.OpenOrCreate);
        var rng = new Random();
        int step = 1024 * 1024;
        int count = (int)Math.Ceiling(size / step);

        for (int i = 0; i < count; i++)
        {
            byte[] bytesToWrite = GenerateRandomBytes(rng, step);
            await fileStream.WriteAsync(bytesToWrite, 0, step);
            await fileStream.FlushAsync();
        }
    }

    public static byte[] GenerateRandomBytes(Random rng, int length)
    {
        var randomBytes = new byte[length];
        rng.NextBytes(randomBytes);
        return randomBytes;
    }
}
相关推荐
淡海水2 小时前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
UIU1145 小时前
同一个变量在两个 .c 文件里类型不一致,程序会怎样?
c++·学习·c#
波力海苔夹心脆67516 小时前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
估值探索者17 小时前
【Python量化策略实战 #02】多因子合成mom和vol两因子打分合成
开发语言·c++·python·数据挖掘·c#
淡海水1 天前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
淡海水2 天前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
lzhdim2 天前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
前端 贾公子2 天前
LangChain核心组件 == 提示词(Prompts)
开发语言·c#
码艺-Alimjan2 天前
Web 网站打包桌面应用的另一种方式,超级简单(C# exe 33Kb)
开发语言·前端·c#
海天鹰2 天前
C#入门:显示窗口
c#