将文件添加到应用程序c#

时间:2013-08-13 05:32:34

标签: c#

我有一些文件,我希望在运行我的应用程序时将这些文件复制到临时文件夹中的文件夹。我的应用程序是用c#编写的。如何将这些文件添加到我的应用程序中,以便在运行我的应用程序时这些文件将被复制到临时文件夹?

我尝试将文件添加为资源,但我仍然需要手动保存这些文件。有没有办法在我的应用程序中嵌入文件,这样当我运行它时会被复制到临时文件夹?

由于

2 个答案:

答案 0 :(得分:1)

确实有。

如果右键单击相关文件的“属性”,您将看到可以更改“构建操作”,将其设置为“内容”,然后设置“如果更新则复制”。然后,它们将被放置在输出文件夹中,与解决方案中的文件夹结构相同。

答案 1 :(得分:1)

无法在.exe中嵌入文件,以便在运行exe时自动复制它们。 (您可以在解决方案资源管理器中设置属性,以便在执行编译时复制它们,如@noon silk建议的那样。同样,您可以使用安装程序安装应用程序以及一些文件,但同样当应用程序运行时,只有在安装时才会复制它们。

要在exe文件中嵌入文件以便在运行时将其复制出来,您可以执行以下操作:

  • 使用Add Existing Item将文件添加到解决方案资源管理器中的项目中。在添加它们时,在文件打开对话框中,单击Add按钮右端的小向下箭头,然后选择Add as Link选项。而不是将当前文件复制到项目中(因此每次更改时都必须手动更新),这只会引用原始文件,并在每次编译时将最新版本复制到应用程序中。
  • 在解决方案资源管理器中获取已添加文件的属性,并将类型设置为Embedded resource
  • 将代码添加到您的应用中以将文件写入磁盘。使用Assembly.ExecutingAssembly().GetManifestResourceStream()将数据读入字节数组,然后通过将数组写入FileStream将数据保存到您选择的位置的磁盘上。

例如:

Stream dataStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyApp.SomeFolder.DataFile.dat");
byte[] fileData = new byte[dataStream.Length];
dataStream.Read(fileData, 0, (int) dataStream.Length);

using (FileStream outStream = new FileStream(@"C:\Temp\RealFileOnDisk.dat", FileMode.Create))
    outStream.Write(fileData, 0, fileData.Length);