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
相关产品推荐
相关产品推荐

