来自Windows应用程序的图像保存问题(C#)

4

我开发了一个Windows应用程序,可以将图片保存在特定的文件夹中,这个文件夹是我们的.exe文件运行的位置。下面是我用来保存图片的代码:

protected string GetPath(string strFileName)
{
     string strPath=System.Environment.CurrentDirectory+@"\UPS\LabelImages\";
     if (!System.IO.Directory.Exists(strPath))
     {
          System.IO.Directory.CreateDirectory(strPath);
     }
     strPath = strPath + strFileName;
     return strPath;
}

问题在于有时候Windows应用程序会抛出异常,如下所示:

Access to path 'C:\Windows\system32\UPS\LabelImages\' denied

假设我的应用程序安装在c:\programfiles32中,然后我的C# exe文件会抛出这种错误。那么告诉我什么是保存图像文件的最佳选项,以便没有用户会出现异常或错误,如Access to path 'C:\Windows\system32\UPS\LabelImages\' denied
寻求建议。

1
您也不需要检查目录是否存在,CreateDirectory会为您完成这项工作,因此您可以每次都调用它。 - Sami Kuhmonen
如果已经存在一个目录,我不想创建它。 - Mou
当然,如果它已经存在,它不会创建它,但它也不会报错,所以无需检查。 - Sami Kuhmonen
@SamiKuhmonen 你是想说如果目录已经存在,CreateDirectory() 就不会创建目录了吗? - Mou
2
创建指定路径下的所有目录和子目录,除非它们已经存在。 - Sami Kuhmonen
3个回答

8
我建议将这些文件保存在更安全的位置,例如专门用于应用程序数据的文件夹中:
var safeFilePath = Path.Combine(Environment.GetFolderPath(
                       Environment.SpecialFolder.ApplicationData), @"UPS\LabelImages");

来自Environment.SpecialFolder文档:

ApplicationData:作为当前漫游用户的特定于应用程序的数据的共同存储库的目录。

您也可以根据需要轻松使用其他位置(例如MyDocumentsMyPictures)。

由于潜在的访问错误,如“System32”、“Program Files”或根C:目录等原因,磁盘上的某些位置不适合尝试保存文件,这可能会导致您遇到类似问题的访问错误。


1
也许您需要以管理员身份运行程序。为此,请尝试在 Properties/app.manifest 文件中添加以下行:
<security>
  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  </requestedPrivileges>

...


0
protected string GetPath(string strFileName)
{
     string strPath=Path.Combine(Environment.GetFolderPath(
        Environment.SpecialFolder.ApplicationData), @"\UPS\LabelImages\"  + strFileName);
     return strPath;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接