我有一个相当大的资源(2MB),我将其嵌入到我的C#应用程序中...我想知道将其读入内存然后将其写入磁盘以便以后处理?
我已将资源嵌入到我的项目中作为构建设置
任何示例代码都可以帮助我启动。
答案 0 :(得分:3)
您需要从磁盘中流入资源,因为.NET Framework可能无法加载您的资源,直到您访问它们(我不是100%肯定,但我相当自信)
在流式传输内容时,您需要将它们写回磁盘。
请记住,这会将文件名创建为“YourConsoleBuildName.ResourceName.Extenstion”
例如,如果您的项目目标名为“ConsoleApplication1”,而您的资源名称为“My2MBLarge.Dll”,那么您的文件将被创建为“ConsoleApplication1.My2MBLarge.Dll” - 当然,您可以修改它正如你看到填充适合。
private static void WriteResources()
{
Assembly assembly = Assembly.GetExecutingAssembly();
String[] resources = assembly.GetManifestResourceNames();
foreach (String name in resources)
{
if (!File.Exists(name))
{
using (Stream input = assembly.GetManifestResourceStream(name))
{
using (FileStream output = new FileStream(Path.Combine(Path.GetTempPath(), name), FileMode.Create))
{
const int size = 4096;
byte[] bytes = new byte[size];
int numBytes;
while ((numBytes = input.Read(bytes, 0, size)) > 0)
output.Write(bytes, 0, numBytes);
}
}
}
}
}
答案 1 :(得分:2)
var assembly = Assembly.GetExecutingAssembly();
using (var stream = assembly.GetManifestResourceStream("namespace.resource.txt"))
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
File.WriteAllBytes("resource.txt", buffer);
}
答案 2 :(得分:2)
尝试以下方法:
Assembly Asm = Assembly.GetExecutingAssembly();
var stream = Asm.GetManifestResourceStream(Asm.GetName().Name + ".Resources.YourResourceFile.txt");
var sr = new StreamReader(stream);
File.WriteAllText(@"c:\temp\thefile.txt", sr.ReadToEnd);
代码假定您的嵌入式文件名为YourResourceFile.txt
,并且它位于项目中名为Resources
的文件夹中。当然文件夹c:\temp\
必须存在且可写。
希望它有所帮助。
/克劳斯