c# - 如何通过保存在 WPF 应用程序输出目录中的文件对话框使用上传的图像文件?
问题描述
我有一个关于在将文件复制到程序调试目录后包含文件的问题。
我有一个 WPF 数据网格,在这个数据网格中,我显示了一个包含列名称、年龄和照片的员工列表。我可以双击一行打开一个新窗口来更新详细信息,其中包括照片。
在我的项目目录中,我有这些文件夹,这些文件夹已包含在我的项目中。默认文件夹由默认员工照片的 .jpg 文件组成,userData 文件夹将用于存储用户上传的照片。
在我的.csproj
文件中,我包含了这个:
<ItemGroup>
<Content Include="img\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
这可确保img
在构建时将文件夹复制到输出目录。我还在文件夹中添加了一个.txt
文件,userData
否则它不会复制文件夹。
当用户上传照片并在我的程序中点击保存时,它会做两件事:
- 将文件从源复制到相对路径的输出目录
img\userData\filename.jpg
- 更新该员工照片路径的 SQLite 记录,例如从
img\default\staffmember1default.jpg
到img\userData\newstaffmember1.jpg
我的程序目前没有更新数据网格以反映更改,因此在关闭和运行程序时,它会为发生照片更改的工作人员显示一张空白照片。但是,如果我将该照片复制到img\userData
我的项目中包含的目录中并重新加载它可以工作的程序。
有没有办法解决这个问题并允许它显示userData
目录中的新照片?这整个方法是否合适,还是有更好的方法来处理整个过程?
解决方案
查看@Clemens 链接后,这是我想出的解决方案,似乎可以解决问题。
private void uploadButton_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if(openFileDialog.ShowDialog() == true)
{
string filepath = openFileDialog.FileName;
string filename = openFileDialog.SafeFileName;
string local_path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string parent_path = local_path + @"\ProjectName";
string child_path = parent_path + @"\user";
if(!System.IO.Directory.Exists(parent_path))
{
System.IO.Directory.CreateDirectory(parent_path);
}
if(!System.IO.Directory.Exists(child_path))
{
System.IO.Directory.CreateDirectory(child_path);
}
string target_path = child_path + @"\" + filename;
File.Copy(filepath, target_path);
photoBox.Source = new BitmapImage(new Uri(target_path));
staff.photo_path = target_path;
}
}
因此,我决定在本地 AppData 中进行,而不是将文件复制到程序的输出目录。文件路径也被存储在 SQLite 数据库中,这样在加载时发现图像很好。
推荐阅读
- javascript - 计算mysql中的重复数据
- python - Celery 任务获取 SoftTimeLimitExceeded 调用 API
- nashorn - 空手道中具有未定义变量的三元条件逻辑
- shell - 无法对远程服务器执行 ssh gettign 横幅错误
- ruby-on-rails - 由于参考错误,无法创建有效的 ActiveRecord 模型
- javascript - 将返回值传递给javascript中的函数参数
- postgresql - 在 Windows 7 上的 PostgreSql 10 中执行命令后,“*#”是什么意思?
- c# - 使用具有未指定类型参数的泛型作为字典中的值
- talend - Talend - 从 tLogRow/tSort 中提取文件名
- javascript - 如何播放音频javascript