将大字符串写入文件

时间:2017-09-09 05:17:18

标签: c# arrays byte

我一直在尝试使用以下方法将非常长的十六进制字符串(8位或1600万字符)写入文件:

File.WriteAllBytes(path, hexarray);

如果我尝试编译,我会收到错误:

  

逻辑内存

将这个十六进制文件写入文件而没有抛出错误的最佳方法是什么?

我正在考虑将字符串分成多个字符串并在EOF处添加hex1然后hex2但在尝试之前我意识到我仍然会在内存中添加更多字符串。

编辑我应该多指定一下我的代码

string z = "2412341A4D2341341234141";  <--this is alot longer tho

File.WriteAllBytes("C:/user/asdf/setup.sdf"), StringToByteArray(z));

public static byte[] StringToByteArray(string hex)
    {
        return Enumerable.Range(0, hex.Length)
                         .Where(x => x % 2 == 0)
                         .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                         .ToArray();
    }

4 个答案:

答案 0 :(得分:1)

如果可以提供帮助,请考虑查看FileStream并保留完整的数据集。如果您正在读取文件并写入另一个文件,则流将提供缓冲的方式,而无需将每个文件全部加载到内存中。

答案 1 :(得分:1)

您的问题标题具有误导性:您收到编译错误。这与编写文件无关。 可能编译器无法在源代码中处理您的字符串,因为它太长了。考虑将其存储在文本文件中,并从代码中读取...如果需要,可以将该文件包含在资源中。处理完成后,您可以使用以下技术之一将其写入新文件。

答案 2 :(得分:-1)

这回答了。这样做的正确方法是将文件添加为资源,然后使用

将它们提取到目录中
File.WriteAllBytes(path, System.Properties.Resources.core);

感谢@jonskeet指出这一点

这并不是我原本想要的,但它有相同的结果

答案 3 :(得分:-2)

请尝试以下操作:

            string hex = "0123456789ABCDEF";
            string z = "2412341A4D23413412341419";

            List<byte> resutls = new List<byte>();

            for (int i = 0; i < z.Length; i += 2)
            {
                byte data = (byte)((hex.IndexOf(z.Substring(i, 1)) << 4) + hex.IndexOf(z.Substring(i + 1, 1)));
                resutls.Add(data);
            }