2010-06-07 95 views
2

它實際上是有用的,我的一些文件存儲在EXE複製到選定的位置。 我正在生成HTML和JS文件,需要複製一些CSS,JS和GIF。存儲文件

片段

System.IO.File.WriteAllBytes(@ 「C:\ MyFile.bin」,ProjectNamespace.Properties.Resources.MyFile);

不適合我!

在「WriteAllBytes」它說: 「無法從‘System.Drawing.Bitmap’轉換爲‘字節[]’」 用於圖像和 「不能從‘字符串’轉換爲‘字節[]’」 爲文本文件。

幫助!

更新:下面解決。

+1

如果您已解決該問題,請單擊最有幫助的答案旁邊的綠色複選標記。 – 2010-06-10 00:59:13

回答

0

將文件添加到項目資源並將其「生成操作」設置爲「嵌入式資源」。

現在提取使用這個片段的任何文件(文本或二進制):

WriteResourceToFile("Project_Namespace.Resources.filename_as_in_resources.extension", "extractedfile.txt"); 


public static void WriteResourceToFile(string resourceName, string fileName) 
{ 
    int bufferSize = 4096; // set 4KB buffer 
    byte[] buffer = new byte[bufferSize]; 
    using (Stream input = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    using (Stream output = new FileStream(fileName, FileMode.Create)) 
    { 
     int byteCount = input.Read(buffer, 0, bufferSize); 
     while (byteCount > 0) 
     { 
      output.Write(buffer, 0, byteCount); 
      byteCount = input.Read(buffer, 0, bufferSize); 
     } 
    } 
} 

不知道根據這篇文章是有多深是正確的:http://www.yoda.arachsys.com/csharp/readbinary.html 但它的作品。

6

你想要的文件添加到您的解決方案,然後他們Build Action屬性設置爲Embedded Resource。這會將該文件嵌入到您的exe文件中。 (msdn

然後你只需要編寫的代碼被執行exe文件時,文件寫入到磁盤中。

喜歡的東西:

File.Copy("resource.bmp", @"C:\MyFile.bin"); 

替換resource.bmp您的文件名。

附錄:

如果你把該文件在您的解決方案,你需要做的路徑的子文件夾部分resource.bmp的子文件夾。例如:

File.Copy(@"NewFolder1\resource.bmp", @"C:\MyFile.bin"); 

此外,您可能需要將Copy To Output Directory屬性設置爲Copy AlwaysCopy If Newer

+0

你說得對,它必須是「Embedded Resource」,但是File.Copy()在這裏不起作用。 我找到了解決方案。 – user360393 2010-06-08 12:07:37

+0

它適用於我......您是否將「resource.bmp」更改爲正確的文件名? – 2010-06-08 12:32:29

+0

舒爾。但事實並非如此。 似乎File.Copy()僅適用於文本文件。 我在這裏離開了我的解決方案。 – user360393 2010-06-08 17:31:50

1

我假設你通過Project Properties窗口中添加的文件。這不允許您添加任意文件,但它確實支持TextFiles,Bitmap等。

對於一個嵌入式文本文件,使用

File.WriteAllText(@"C:\MyFile.bin", Properties.Resources.TextFile1); 

對於圖像,請使用

Properties.Resources.Image1.Save(@"C:\MyFile.bin"); 
0

可以在.resx文件嵌入二進制文件。把它們放在文件部分(它看起來像你使用的圖片部分代替)。如果.resx文件生成.Designer.cs文件,它應該可以作爲字節數組訪問。

File.WriteAllBytes(@"C:\foobar.exe", Properties.Resources.foobar);