[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;
    }
}
相关推荐
leo__5206 小时前
C#与三菱PLC串口通信源码实现(基于MC协议)
开发语言·c#
墨瑾轩7 小时前
C# PictureBox:5个技巧,从“普通控件“到“图像大师“的蜕变!
开发语言·c#·swift
墨瑾轩7 小时前
WinForm PictureBox控件:3个让图片“活“起来的骚操作,90%的开发者都踩过坑!
开发语言·c#
Jackson@ML12 小时前
2026最新版Visual Studio安装使用指南
ide·c#·visual studio
莫生灬灬14 小时前
VueMultiBrowser 5.0 开源 - 基于 Vue3 + CEF 的多浏览器管理器
chrome·开源·c#·自动化·多开·cef3
xb113215 小时前
C#异步编程入门概念及核心概念
开发语言·c#
gc_229917 小时前
学习C#调用OpenXml操作word文档的基本用法(19:学习文档页脚类)
c#·word·openxml·页脚·footerpart
baivfhpwxf202318 小时前
C# Task.Run 和 Task.Factory.StartNew 的区别
开发语言·c#
数据的世界0119 小时前
C# 封装、继承、多态 通俗解释
c#
人工智能AI技术20 小时前
【C#程序员入门AI】AI应用的操作系统:Semantic Kernel 2026实战
人工智能·c#