You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何生成随机数量、随机内容、随机大小的文本文件

C# 随机文本文件生成实现

针对现有代码的改造需求,以下是完整可直接运行的实现:

using System;
using System.IO;
using System.Text;

namespace GF_WPF
{
    class RandomFiles
    {
        // 类级静态随机数实例,避免短时间内重复实例化导致随机值重复
        private static readonly Random _random = new Random();
        // 可打印字符池,包含大小写、数字、常用标点、换行符,避免生成不可读控制字符
        private const string CharPool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,.!?;:'\"-()\r\n";

        /// <summary>
        /// 在指定目录下生成随机数量、随机文件名、随机大小、随机内容的文本文件
        /// </summary>
        /// <param name="filePath">文件存放目录路径</param>
        /// <param name="numOfFiles">最大生成文件数,实际生成数量为1~该值区间内的随机整数</param>
        public static void GenerateFiles(string filePath, int numOfFiles)
        {
            // 目录不存在则自动创建
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }

            // 随机确定实际生成的文件总数,范围为[1, numOfFiles]
            int actualFileCount = _random.Next(1, numOfFiles + 1);

            // 大小档位覆盖从6字节到1GB的全量级需求
            (long MinSize, long MaxSize)[] sizeRanges = new[]
            {
                (6L, 1024L),                  // 6字节 ~ 1KB 极小文件
                (1024L, 1024*60L),            // 1KB ~ 60KB
                (1024*60L, 1024*1024L),       // 60KB ~ 1MB
                (1024*1024L, 7*1024*1024L),   // 1MB ~7MB
                (7*1024*1024L, 1024*1024*1024L) // 7MB ~1GB 大文件
            };

            // 8KB写入缓冲区,平衡大文件写入速度和内存占用
            const int bufferSize = 8 * 1024;
            char[] writeBuffer = new char[bufferSize];

            for (int i = 0; i < actualFileCount; i++)
            {
                // 生成不重复的随机txt文件名
                string randomFileName = $"{Guid.NewGuid():N}.txt";
                string fullSavePath = Path.Combine(filePath, randomFileName);

                // 随机选取大小档位,在档位区间内随机取最终文件大小
                var selectedRange = sizeRanges[_random.Next(0, sizeRanges.Length)];
                long targetFileSize = _random.NextInt64(selectedRange.MinSize, selectedRange.MaxSize + 1);

                // 分段写入随机内容直到达到目标文件大小
                using (StreamWriter writer = new StreamWriter(fullSavePath, false, Encoding.UTF8, bufferSize))
                {
                    long remainSize = targetFileSize;
                    while (remainSize > 0)
                    {
                        int currentWriteLen = (int)Math.Min(bufferSize, remainSize);
                        // 填充缓冲区为随机字符
                        for (int j = 0; j < currentWriteLen; j++)
                        {
                            writeBuffer[j] = CharPool[_random.Next(CharPool.Length)];
                        }
                        writer.Write(writeBuffer, 0, currentWriteLen);
                        remainSize -= currentWriteLen;
                    }
                }
            }
        }
    }
}

核心实现说明

  • 随机数实例做类级静态化,规避短时间内多次实例化Random生成重复随机序列的常见问题
  • 大小档位完全覆盖需求要求的量级:最小从6字节起步,最高支持1GB文件,每个文件大小在对应区间内随机取值,无固定大小问题
  • 所有随机内容从可打印字符池选取,生成的文件为标准UTF-8编码可读文本,不会出现乱码或不可读控制字符
  • 采用分段缓冲区写入逻辑,生成GB级大文件时内存占用稳定在KB级,不会出现内存溢出问题
  • 文件名通过Guid生成,无重名覆盖风险;写入前自动检查目标目录,不存在则递归创建
  • 实际生成文件数严格遵循规则:传入numOfFiles为N时,生成数量为1~N之间的随机整数

注:代码中Random.NextInt64为.NET 6及以上版本提供的API,若使用更低版本,可自行实现长整型随机数生成逻辑替换,核心功能不受影响。

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:06:29