将文件存储在C#EXE文件中
对我来说,在EXE中存储一些文件以复制到选定位置实际上很有用。 我正在生成HTML和JS文件,需要复制一些CSS,JS和GIF。
片段
System.IO.File.WriteAllBytes(@“C:\ MyFile.bin”,ProjectNamespace.Properties.Resources.MyFile);
不适合我!
在“WriteAllBytes”上,它说:“无法从’System.Drawing.Bitmap’转换为’byte []’”用于图像,“无法从’string’转换为’byte []’”用于文本文件。
救命!
更新:解决方案如下。
将所需文件添加到解决方案中,然后将其“ 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 Always
或“ Copy If Newer
。
我假设你通过Project Properties窗口添加了文件。 这不允许您添加任意文件,但它支持TextFiles,Bitmaps等。
对于嵌入的TextFile,请使用
File.WriteAllText(@"C:\MyFile.bin", Properties.Resources.TextFile1);
对于图像,请使用
Properties.Resources.Image1.Save(@"C:\MyFile.bin");
您可以将二进制文件嵌入.resx文件中。 将它们放在“ 文件”部分(看起来您使用的是“ 图像”部分)。 如果.resx文件生成.Designer.cs文件,它应该可以作为字节数组访问。
File.WriteAllBytes(@"C:\foobar.exe", Properties.Resources.foobar);
将文件添加到项目资源并将其“构建操作”设置为“嵌入式资源”。
现在使用此代码段提取任何文件(文本或二进制文件):
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但是它有效。