生成1 MB(或n MB)的c#文本文件

本文关键字:MB 文本 文件 生成 | 更新日期: 2023-09-27 18:15:49

我需要创建一个文本文件(字母数字)的大小(精确或接近)MB等于我的输入数字,如1 MB。我试图生成一个字符串,认为一个字符是16位或2字节,所以:1KB = 1024字节= 1024 × 8比特= 1024 × 8/16个字符= 512个字符。但生成的文件似乎不是很正确:(如果我生成字节数组并将其写入文件,大小是相当正确的!

 public static void generateDummyFileBySize(long sizeInMb, string filePath) {
            byte[] data = new byte[sizeInMb * 1024 * 1024];
            Random rng = new Random();
            rng.NextBytes(data);
            File.WriteAllBytes(filePath, data);
        }

请帮帮我。这是我用来生成文本文件

的代码
public static String generateStringSize(long sizeByte)
        {
            StringBuilder sb = new StringBuilder();
            Random rd = new Random();
            /**
             * Byte -> Bit -> Divide by 16 to num of char
             * */
            var numOfChars = sizeByte * 8 ;
            string allows = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            int maxIndex = allows.Length - 1;
            for (int i = 0; i < numOfChars; i++)
            {
                int index = rd.Next(maxIndex);
                char c = allows[index];
                sb.Append(c);
            }
            return sb.ToString();
        }
public static void generateTextFileBySize(long size, string fileName)
        {
            long sizeOld = size;
            try
            {
                String s;
                String path = Directory.GetCurrentDirectory();
                var physicPath = path + Path.DirectorySeparatorChar + fileName;
                File.Delete(physicPath);
                if (size <= MAX_SIZE)
                {
                    s = StringUtil.generateStringSize(size);
                    Console.WriteLine("Generated a string with length " + size);
                    File.WriteAllText(physicPath, s, Encoding.UTF8);
                }
                else
                {
                    while (size > MAX_SIZE)
                    {
                        s = StringUtil.generateStringSize(MAX_SIZE);
                        Console.WriteLine("Appending " + MAX_SIZE + " to file");
                        File.AppendAllText(physicPath, s, Encoding.UTF8);
                        size -= MAX_SIZE;
                    }
                    s = StringUtil.generateStringSize(size);
                    File.AppendAllText(physicPath, s, Encoding.UTF8);
                }
                Console.WriteLine("Created file named " + fileName + " with size " + sizeOld + " bytes.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error when generating file");
                Console.WriteLine(ex.Message);
            }
        }

生成1 MB(或n MB)的c#文本文件

问题在这里:

var numOfChars = sizeByte * 8 ;

你创造了8倍于你需要的字符。直接使用

var numOfChars = sizeByte;

您使用的每个字符在存储为UTF-8时占用一个字节,因此您不需要使用与所需字节数不同的字符数。

对代码做了如下修改:

8var numOfChars = sizeByte*8;中移除,因为在ASCII encoding中,每个character都是1 byte,并且将编码更改为ASCII instead of UTF8以精确地识别字符。

以下是工作代码,生成精确的1mb文件,我已经测试了其他值,如8mb, 7mb,结果是准确的

    String s = generateStringSize(1024 * 1024); 
    File.WriteAllText("D:''Test1.txt", s, Encoding.ASCII);