繁体   English   中英

访问路径被拒绝

[英]Access to the path is denied

我正在尝试将图像保存到 .NET C# 中的文件夹,但出现此异常:

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

我将这个文件夹(savehere)完全控制给了network serviceiis_iusrs ,甚至完全控制了everyone ,但仍然得到这个异常。 我尝试通过资源管理器和 IIS 经理授予访问权限,但仍然没有成功

我在 Windows 服务器 2008 R2 和 IIS 7.5 上执行此操作,我需要向谁授予访问权限?

拒绝访问路径“C:\\inetpub\\wwwroot\\mysite\\images\\savehere”

仔细阅读消息。 您正在尝试保存到与目录同名的文件。 这是行不通的,你不能用一个新文件覆盖一个充满文件的目录。 这将导致无法诊断的数据丢失,“对路径的访问被拒绝”是文件系统进行反击以防止这种情况发生。

异常消息并不理想,但它直接来自操作系统,并且是一成不变的。 该框架通常会添加额外的检查以生成更好的消息,但这是在网络上进行的一项昂贵的测试。 Perf 也是一个特性。

您需要使用类似“C:\\inetpub\\wwwroot\\mysite\\images\\savehere\\mumble.jpg”的名称。 考虑Path.Combine()以可靠地生成路径名。

您需要从网站的应用程序池中找出它运行的身份是什么(默认情况下这是Application Pool Identity )并授予正确的权限。

我在尝试在服务器上创建文件时遇到了同样的问题(实际上是一个从模板复制的文件)。

这是完整的错误消息:

{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.

我在 IIS 应用程序文件夹中添加了一个名为Templates的新文件夹。 就我而言,一件非常重要的事情是,我需要为该文件夹的 IUSR 用户授予 Write (Gravar) 权限。 您可能还需要授予Network ServiceASP.NET v$.#相同的写入权限。

在此处输入图片说明

完成此操作后,一切都按预期进行。

我遇到了完全相同的问题。

解决方案是我试图访问的文件是只读的,因为它是从只读的模板文件中复制的。

<面掌/>

当我尝试在不设置文件名的情况下保存文件时遇到了这个问题。

旧代码

File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));

工作代码

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));

我的问题是我必须要求只读访问权限:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);

我用这个设置解决了:

IIS > 应用程序池 > [您的站点] > 高级设置... > 身份 > 内置帐户 > LocalSystem

请将 IIS_IUSERS 完全控制权限添加到您的文件夹。 您可以从文件夹属性的安全选项卡中找到此选项。 在此图像中找到此选项和用户

运行 Web 应用程序的应用程序池的身份是什么,要进行故障排除,请尝试创建一个新的应用程序池,并将网络服务作为其身份,并使您的 Web 应用程序使用您创建的新应用程序池,然后查看错误是否仍然存在。

以下提示不是该线程原始问题的答案,但可能会帮助其他一些最终访问此网页的用户,因为我犯了同样的愚蠢错误...

我试图让 ASP.Net FileUpload 控件将其文件上传到包含“隐藏共享”的网络地址,即:

\\MyNetworkServer\\c$\\SomeDirectoryOrOther

我不明白。 如果我在 Visual Studio 中以调试模式运行网页,它会正常工作。 但是当项目被部署并通过应用程序池用户运行时,它拒绝找到这个网络目录。

我已经检查了我的 IIS 站点在哪个用户下运行,给了这个用户对“ MyNetworkServer ”服务器上的这个目录的完全权限,等等,但没有任何效果。

原因(当然!)是只有管理员才能“看到”这些隐藏的驱动器共享。

我的解决方案只是创建一个“正常”共享

\\MyNetworkServer\\SomeDirectoryOrOther

这摆脱了“访问路径...被拒绝”错误。 FileUpload 能够成功运行命令

fileUpload.SaveAs(networkFilename);

希望这可以帮助其他一些犯同样错误的用户!

另请注意,如果您要上传大文件(超过 4Mb),则 IIS7 要求您在两个位置修改 web.config 文件。 点击此链接阅读您需要做的: 在 ASP.Net 中上传大文件

我的问题是这样的:

FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

但不是使用路径,我应该使用 File.FullName ......我不知道它是否会帮助其他人,只是通过我自己的经验给出这个错误!

  1. 将设置从内置帐户更改为自定义帐户并输入其他服务器的用户名和密码。

  2. 保持设置为集成(而不是经典模式)。

或许能帮到你

string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);

有一个与我尝试写入的文件同名的目录,因此人们也可以注意它。

我在本地工作站上开发时遇到了这个问题。

在几次不成功的iisreset调用之后,我通过重新启动我的机器来纠正这种情况。

回想起来,打开的文件句柄可能导致了问题。

就我而言,我必须在 IIS 中为网站添加 .NET 授权规则。

我添加了一个规则来允许匿名用户。

.NET 授权规则

此处保存的目录设为虚拟目录并从控制面板授予读/写权限

我遇到了同样的问题,但我通过将文件保存在不同的位置,然后复制文件并将其粘贴到我想要的位置来修复它。 我使用了替换现有文件的选项,这对我有用。 我知道这不是最有效的方法,但它有效并且只需不到 15 秒。

我在这方面遇到了很多麻烦,特别是与我在本地运行的代码有关,但是当我需要在 IIS 上运行它时,它抛出了这个错误。 我发现向我的代码添加检查并让应用程序在第一次运行时创建文件夹可以解决问题,而不必弄乱文件夹授权。

在调用使用文件夹的方法之前,类似这样的事情

bool exists = System.IO.Directory.Exists("mypath");

        if (!exists)
            System.IO.Directory.CreateDirectory("mypath");

如果在子域中上传文件时出现此错误并且在localhost正常工作,请按照以下步骤操作:

解决方案:

Plesk 面板

  • 登录到您的 Plesk 面板。 选择出现错误的您的子域。
  • 单击主机设置
  • 选择其他写入/修改权限并应用。

面板

  • 我不确定 CPanel 中可用的选项。 但是,如果您授予目录权限(在 CPanel 中,它必须是十进制数,如 777、755)将解决错误。

有关更多详细信息,请参阅此处

错误原因:

  • 让我们假设FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))将是您将文件移动到上传路径的代码。
  • Server.MapPath将为您提供目录的物理路径(Real Path)。 但是您的子域可能没有访问物理路径的权限。

  • 因此,如果您授予子域访问写入/修改权限的权限,它将解决问题。

您可以尝试检查项目的 Web 属性是否没有切换到 IIS Express 并将其改回 IIS Local

确保System.IO.Delete(string file)中的目标是一个存在的文件。 也许您的代码中有错误;比如您没有将正确的文件名传递给方法,或者您的目标是一个文件夹。 在这些情况下,您会看到:“访问路径被拒绝错误”。

就我而言,我正在尝试访问设置为只读的文件

在此处输入图片说明

我通过禁用只读来解决它并修复了它!

在此处输入图片说明

希望对像我这样遇到情况的人有所帮助。

您需要添加具有ReadWrite值的访问参数,如下所示

using (var stream = new FileStream(localPath, FileMode.Create, access : FileAccess.ReadWrite))
{
    file.CopyTo(stream);
} 

我最近在尝试访问通过命令行参数传递到我的.Net Core应用程序的文件时遇到了问题,这是因为当应用程序在“打开方式”(系统资源管理器上下文菜单下)下运行时一个文件)系统菜单当前活动的用户可能会有所不同,并且用户没有访问我试图从中打开文件的外部驱动器的权限。

我花了 3-4 个小时才理解,我通过为包含该文件的文件夹设置安全设置来解决它。 对于 Windows 10 x64:只需使用Properties -> Security -> Users and Groups -> Change.. -> Add -> Additional -> Search -> <your windows account name> -> OK -> OK -> Set full access for your current account. 还要确保该文件在属性中“未被阻止”。

我创建了一个具有完全权限的虚拟目录,并在那里添加了 ffmpeg 源和视频文件,所以最终它是有意义的,因为它可以被任何人访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM