【问题标题】:How to use uploaded image file via file dialog which is saved in the output directory on WPF Application?如何通过保存在 WPF 应用程序输出目录中的文件对话框使用上传的图像文件?
【发布时间】:2019-04-17 14:27:28
【问题描述】:

我有一个关于在将文件复制到程序调试目录后包含文件的问题。

我有一个 WPF 数据网格,在这个数据网格中,我显示了一个包含列名称、年龄和照片的员工列表。我可以双击一行打开一个新窗口来更新详细信息,其中包括照片。

在我的项目目录中,我有这些 folders 我已包含在我的项目中。默认文件夹由默认员工照片的 .jpg 文件组成,userData 文件夹将用于存储用户上传的照片。

在我的.csproj 文件中,我包含了这个:

<ItemGroup>
  <Content Include="img\**">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

这可确保 img 文件夹在构建时被复制到输出目录。我还在userData 文件夹中添加了一个.txt 文件,否则它不会复制该文件夹。

当用户上传照片并在我的程序中点击保存时,它会做两件事:

  1. 将文件从源文件复制到相对路径img\userData\filename.jpg的输出目录
  2. 更新该员工照片路径的 SQLite 记录,例如从img\default\staffmember1default.jpgimg\userData\newstaffmember1.jpg

我的程序目前没有更新数据网格以反映更改,因此在关闭并运行程序时,它会为发生照片更改的工作人员显示一张空白照片。但是,如果我将该照片复制到项目中包含的 img\userData 目录中并重新加载它可以工作的程序。

有没有办法解决这个问题并允许它显示来自userData 目录的新照片?这整个方法是否合适,还是有更好的方法来处理整个过程?

【问题讨论】:

  • 请注意,您的应用程序可能在其安装目录中没有写入权限。更好地将图像文件保存在 ApplicationData 的子文件夹中:stackoverflow.com/q/9709269/1136211
  • @Clemens 感谢您为我指明方向!我设法为您的链接问题创建了一个解决方案。

标签: c# wpf visual-studio


【解决方案1】:

查看@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 数据库中,这样在加载时会发现图像正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 2011-01-12
    相关资源
    最近更新 更多