我有一個相當大的資源(2MB),我嵌入到我的C#應用程序中...我想知道將它讀入內存,然後將它寫入磁盤以便將其用於以後處理?將文件嵌入到C#.NET應用程序中,然後慢慢讀取它?
我已經嵌入到資源到我的項目作爲構建設置
代碼的任何試片會幫我啓動。
我有一個相當大的資源(2MB),我嵌入到我的C#應用程序中...我想知道將它讀入內存,然後將它寫入磁盤以便將其用於以後處理?將文件嵌入到C#.NET應用程序中,然後慢慢讀取它?
我已經嵌入到資源到我的項目作爲構建設置
代碼的任何試片會幫我啓動。
你需要從磁盤資源到流中,因爲.NET框架可能直到你訪問它們將不會加載你的資源(我不是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);
}
}
}
}
}
工程...謝謝添加異常處理 – halivingston 2010-01-06 08:55:12
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);
}
嘗試以下操作:
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\
必須存在並且是可寫的。
希望它有幫助。
/Klaus
「as build setting」並不意味着什麼。您是在資源標籤中看到它,還是在解決方案窗口中可見? – 2010-01-06 08:49:27