我一直在尝试使用以下方法将非常长的十六进制字符串(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();
}
答案 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);
}