C# Bitmap.Save 将图像作为路径保存到其他位置

Posted

技术标签:

【中文标题】C# Bitmap.Save 将图像作为路径保存到其他位置【英文标题】:C# Bitmap.Save saves image to other location as path 【发布时间】:2010-08-05 16:43:50 【问题描述】:

我正在做一个简单的图像调整大小,最后我想保存它:

path = "C:\\new_image.jpg";
img.Save(path, jpegCodec, encoderParams);

问题是它保存到 "....... \Users\Ervin\AppData\Local\VirtualStore\" 。 我做错了什么或错过了什么?

更新:我将路径更改为另一个文件夹,它可以工作。看来我不能只保存到 C:\。

【问题讨论】:

您是否尝试过通过调试器运行以确保路径是您认为的那样?另外,您使用的是什么确切的 .Net 库? img 是什么? 【参考方案1】:

此问题是您正在运行的用户没有直接写入 C: 驱动器的写入权限,这是 Win7 或 Vista 的新驱动器,我不知道是哪个。

您可以通过以下方式解决此问题:

    保存在 C: 根目录以外的目录中 更改 C: 驱动器上的权限,以便管理员组以外的人具有写入权限。 以提升的权限运行您的程序。

....... \Users\Ervin\AppData\Local\VirtualStore\ 已添加以帮助您在更新时修复遗留应用程序。您可能还会注意到虚拟商店的“程序文件”中有很多条目。这些程序试图在程序文件中写入自己的目录,而不是像他们应该的那样写入 %LOCALAPPDATA%。

【讨论】:

仍然很惊讶它在无法写入指定的显式路径时不会抛出异常。 我编辑了我的答案。他们添加了虚拟存储而不是抛出异常,以防止数以百万计的程序在不应该抛出异常的地方写入。 通常情况下,您应该将应用程序数据保存到 %AllusersProfile% 文件夹中,该文件夹在 Vista 及更高版本中指向 c:\programdata。这将避免在您写入 c:c:\windows 或其他只有管理员有权写入的文件夹时发生的虚拟化问题。 谢谢 我不知道应该使用哪个系统变量。我只是在黑暗中刺了一下,看着最有可能的那个。【参考方案2】:

这是在 Vista 中引入的,称为Virtualization:

文件虚拟化解决了 应用程序依赖的情况 关于存储文件的能力,例如 作为配置文件,在系统中 位置通常只能由 管理员。运行程序作为 这种情况下的标准用户可能 导致程序失败由于 访问级别不足。

当应用程序写入系统时 位置只能写 管理员,然后 Windows 写入 所有后续文件操作到 Virtual下的用户特定路径 存储目录,位于 %LOCALAPPDATA%\VirtualStore。之后, 当应用程序读回这个 文件,计算机将提供 一个在虚拟商店。因为 Windows 安全基础架构 无需处理虚拟化 申请的协助, 应用程序认为它能够 直接读写成功 到程序文件。透明度 文件虚拟化使 应用程序来感知它们是 从受保护的写入和读取 资源,实际上它们是 访问虚拟化版本。

【讨论】:

以上是关于C# Bitmap.Save 将图像作为路径保存到其他位置的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Pillow从图像创建位图而不保存图像?

将位图保存为任何格式

DreamFactory:如何将图像上传到文件服务器并将图像的路径保存在数据库中?

Bitmap.Save整个法师都是黑色的,不只是背景[重复]

将作为屏幕截图的特定区域的图片保存到所需路径

使用 C# 和 jQuery 将画布保存到图像