Windows 表单应用程序:在应用程序安装时添加文件
Windows Forms Application: Add file on app Install
我的 WF 应用程序需要 excel 文件才能正常工作。有什么方法可以将该文件添加到项目中,并且当用户安装我的应用程序时,它会自动将自己置于默认路径中?
谢谢
您可以将文件嵌入到您的可执行程序集中:
将文件添加到项目中。
Select 解决方案资源管理器中的文件并打开属性 (F4)。
将 "Build Action" 设置为 "Embedded Resource"。
在您的代码中,加载资源流并将其复制到目标文件流:
var assembly = Assembly.GetExecutingAssembly();
using (var resourceStream = assembly.GetManifestResourceStream("YourNamespace.ExcelFile.xlsx"))
using (var targetStream = File.OpenWrite("targetFile.xlsx"))
{
resourceStream.CopyTo(targetStream);
}
确保 YourNamespace
与您在项目中放置 Excel 文件的目录结构的命名空间相匹配。
This Knowledge Base article有详细的步骤说明
将文件添加到您的项目并将其构建操作设置为 "Copy if newer." 之后,它应该在安装应用程序时与您的二进制文件一起部署。但是,请注意此副本应被视为只读。
如果您需要在安装后保存对文件的更改,则将其复制到用户配置文件中的应用程序数据文件夹中:
var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var writableFilePath = Path.Combine(appDataFolder, "MyApplication\MyExcelFile.xlsx");
// ensure directory exists before copying to it:
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(writableFilePath));
...并在文件已存在时使用此文件而不是只读版本。
我的 WF 应用程序需要 excel 文件才能正常工作。有什么方法可以将该文件添加到项目中,并且当用户安装我的应用程序时,它会自动将自己置于默认路径中?
谢谢
您可以将文件嵌入到您的可执行程序集中:
将文件添加到项目中。
Select 解决方案资源管理器中的文件并打开属性 (F4)。
将 "Build Action" 设置为 "Embedded Resource"。
在您的代码中,加载资源流并将其复制到目标文件流:
var assembly = Assembly.GetExecutingAssembly(); using (var resourceStream = assembly.GetManifestResourceStream("YourNamespace.ExcelFile.xlsx")) using (var targetStream = File.OpenWrite("targetFile.xlsx")) { resourceStream.CopyTo(targetStream); }
确保
YourNamespace
与您在项目中放置 Excel 文件的目录结构的命名空间相匹配。
This Knowledge Base article有详细的步骤说明
将文件添加到您的项目并将其构建操作设置为 "Copy if newer." 之后,它应该在安装应用程序时与您的二进制文件一起部署。但是,请注意此副本应被视为只读。
如果您需要在安装后保存对文件的更改,则将其复制到用户配置文件中的应用程序数据文件夹中:
var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var writableFilePath = Path.Combine(appDataFolder, "MyApplication\MyExcelFile.xlsx");
// ensure directory exists before copying to it:
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(writableFilePath));
...并在文件已存在时使用此文件而不是只读版本。