【C#】指定フォルダに大量のランダムファイル群を作る
//
// 指定フォルダに大量のランダムファイル群を作る
//
// >C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe このファイル.cs
// >このファイル.exe 空フォルダパス [1ファイルのサイズ(1MB)]
//
using System;
using System.IO;
using System.Text;
class Program
{
static void Main(string[] args)
{
string targetFolder = args[0]; // ターゲットフォルダ
string fileSizeStr = args.Length > 1 ? args[1] : "1MB"; // 1ファイルサイズ
try
{
long fileSizeBytes = ConvertFileSizeToBytes(fileSizeStr);
CreateFoldersAndFiles(targetFolder, fileSizeBytes);
}
catch (Exception ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
}
static long ConvertFileSizeToBytes(string size)
{
var regex = new System.Text.RegularExpressions.Regex(@"(\d+)([KMGT]B)?");
var match = regex.Match(size);
if (match.Success)
{
int value = int.Parse(match.Groups[1].Value);
string unit = match.Groups[2].Value.ToUpper();
switch (unit)
{
case "KB": return value * 1024;
case "MB": return value * 1024 * 1024;
case "GB": return value * 1024 * 1024 * 1024;
case "TB": return value * 1024 * 1024 * 1024 * 1024;
default: return value; // 単位が無い場合はバイト単位として扱う
}
}
else
{
throw new ArgumentException("Invalid file size format: " + size);
}
}
static void CreateRandomFile(string filePath, long size)
{
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder data = new StringBuilder();
while (data.Length < size)
{
int chunkSize = (int)Math.Min(10000, size - data.Length);
for (int i = 0; i < chunkSize; i++)
{
data.Append(chars[random.Next(chars.Length)]);
}
}
File.WriteAllText(filePath, data.ToString());
}
static string GenerateRandomFileName(int length = 200)
{
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder randomString = new StringBuilder();
for (int i = 0; i < length; i++)
{
randomString.Append(chars[random.Next(chars.Length)]);
}
return randomString.ToString();
}
static void CreateFoldersAndFiles(string baseFolder, long fileSize)
{
try
{
if (!Directory.Exists(baseFolder))
{
Directory.CreateDirectory(baseFolder);
}
for (int i = 0; i < 100; i++)
{
string subFolder = Path.Combine(baseFolder, i.ToString("D2"));
if (!Directory.Exists(subFolder))
{
Directory.CreateDirectory(subFolder);
}
for (int j = 0; j < 100; j++)
{
string fileName = GenerateRandomFileName();
string filePath = Path.Combine(subFolder, fileName + ".txt");
CreateRandomFile(filePath, fileSize);
}
// 再帰処理
CreateFoldersAndFiles(subFolder, fileSize);
}
}
catch (Exception ex)
{
Console.WriteLine("Error: {0}", ex.Message);
return;
}
}
}