我在尝试删除文件时遇到问题但是我遇到了异常。
if (result == "Success")
{
if (FileUpload.HasFile)
{
try
{
File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
string filename = Path.GetFileName(btnFileUpload.FileName);
btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
}
catch (Exception ex)
{
Message(ex.ToString());
}
}
}
另外我应该注意,我尝试删除的文件夹可以完全控制网络服务。
完整的异常消息是:
System.UnauthorizedAccessException:拒绝访问路径'C:\ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg'。 at System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.File.Delete(String path)at hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click(Object sender,EventArgs e)in C:\ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs:第242行
有什么想法吗?
答案 0 :(得分:163)
我也有问题,因此我在这篇文章上遇到了磕磕绊绊。我在复制/删除之前和之后添加了以下代码行。
删除强>
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
复制强>
File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
答案 1 :(得分:139)
根据File.Delete Method ...
UnauthorizedAccessException
表示以下四项内容之一:
答案 2 :(得分:25)
这是一个老问题,但我在搜索时碰到了它。事实证明我在SaveAs ...的保存路径中缺少实际的文件名组件
string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
答案 3 :(得分:17)
当用户尝试连接到您的网站时,IIS会将连接分配给 IUSER_ComputerName 帐户,其中ComputerName是运行IIS的服务器的名称。默认情况下, IUSER_ComputerName 帐户是Guests组的成员。该组有安全限制。尝试将IUSER_ComputerName宏访问该文件夹
Here是关于IIS安全性的非常好的描述
希望这有帮助
答案 4 :(得分:9)
我收到了错误,因为我没有意识到目标应该是一个文件。我有一个文件夹作为第二个参数(在cmd中工作)。我得到Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.
,因为C#File.Move
想要一个文件,不只是第一个参数,而是第二个参数,所以如果你把一个目录作为第二个参数,那就试试了当你有一个名为c:\crp
的目录时,写一个像c:\crp
这样的文件。
这将不正确 File.Move(args[0],"c:\\crp");
所以,这将是正确 File.Move(args[0],"c:\\crp\\a.a");
File.Copy
答案 5 :(得分:8)
右键单击Visual Studio,然后单击以管理员身份运行
答案 6 :(得分:6)
如果这是遇到问题的IIS网站,请检查站点或应用程序使用的应用程序池的高级设置的Identity属性。您可能会发现它已设置为ApplicationPoolIdentity,在这种情况下,这是必须有权访问路径的用户。
或者您可以使用旧式并简单地将Identity设置为网络服务,并让网络服务用户访问该路径。
答案 7 :(得分:3)
我打了同样的话。检查以确保该文件不是隐藏的。操作系统拒绝访问时引发的异常 由于I / O错误或特定类型的安全错误。
答案 8 :(得分:2)
我收到了这个错误并在一瞬间解决了它。不知道为什么我的所有文件夹都是只读的,我取消了只读并应用它。但是,它仍然是只读的。所以我将文件移动到根文件夹中,它可以工作 - 太奇怪了。
答案 9 :(得分:2)
当操作系统因I / O错误或安全错误而拒绝访问时,将引发UnauthorizedAccessException异常。
如果您尝试访问文件或注册表项,请确保不是只读。
答案 10 :(得分:2)
您需要修改您要删除/保存到的文件夹的权限。右键单击包含文件夹,然后使用“安全”选项卡允许修改对应用程序运行的用户的权限。
答案 11 :(得分:1)
请注意,如果您尝试从代码中访问共享文件夹路径,则不需要通过安全选项卡向physicial文件夹提供适当的权限。您还需要通过“共享”选项卡与相应的应用程序池用户“共享”该文件夹
答案 12 :(得分:1)
我在共享服务器上新移动的网站上遇到了同样的问题。解决了通过Web主机面板(DotNetPanel)设置true“允许写入权限”。因此,如果您在查看所有代码之前都在共享服务器中,请查看服务器配置并节省大量时间。
答案 13 :(得分:1)
我遇到了这个错误,因为
有时当我Combine
路径 文件名和FileName = ""
成为Path Directory
而不是file
这是一个问题mentioned above
所以你必须检查FileName
这样的
if(itemUri!="")
File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));
答案 14 :(得分:1)
删除文件时出现确切错误。这是一个在服务帐户下运行的Windows服务,即使它具有完全控制权,也无法从共享文件夹中删除.pdf文档。
对我有用的是导航到“共享文件夹”>“高级”>“共享”>“添加”的“安全性”选项卡。
然后我将服务帐户添加到管理员组,应用更改,然后该服务帐户可以对该文件夹中的所有文件执行所有操作。
答案 15 :(得分:1)
当我的窗口服务开始引发异常时,我也遇到了这个问题
len(path) == k
作为一种解决方案,我检查了与我的服务关联的用户帐户,如下面的屏幕截图所示
因此,在我看来,这是网络服务
然后转到文件夹属性,以检查关联的用户帐户是否也位于其权限标签下。就我而言,它丢失了,当我添加它时,它解决了我的问题。
有关更多信息,请检查以下屏幕截图
答案 16 :(得分:1)
就我而言,问题出在诺顿。我的内部程序没有正确的数字签名,当它尝试删除文件时,它给出了UnauthorizedAccessException。
如果它给您通知,则可以从那里进行处理。就我而言,它没有发出我注意到的通知。因此,这是防止Norton阻止程序的方法。
答案 17 :(得分:1)
检查文件属性。如果选中只读,则取消选中它。这是我在UnauthorizedAccessException中的个人问题。
答案 18 :(得分:1)
因此请确保在路径中输入路径+文件名
System.IO.File.WriteAllBytes("path", bytearray);
答案 19 :(得分:0)
首先,只需检查驱动器号后是否存在冒号(:)字符即可。如果不缺少冒号,则可以检查是否为该路径授予了访问/写入权限。 我遇到了同样的问题,我只是想念冒号,许可和其他一切都很好。
C:\folderpath
可以正常工作,但是
C\folderpath .........(missing colon)
将给您访问拒绝错误。
答案 20 :(得分:0)
我遇到了同样的问题,我设法通过更改将保存文件的分区来使其正常工作。因此,在第 5 行,我将 @"C:\" 更改为 @"D:\" 并解决了问题。
static void SaveVideoToDisk(string link)
{
var youTube = YouTube.Default; // starting point for YouTube actions
var video = youTube.GetVideo(link); // gets a Video object with info about the video
File.WriteAllBytes(@"D:\" + video.FullName, video.GetBytes());
}
答案 21 :(得分:0)
就我而言,是我的 AVG 防病毒软件触发了异常。
我将我的 VS 项目目录添加到“允许”列表中。在将 .exe
复制到我的 App 目录后,我不得不将可执行文件添加到 AVG 例外列表中。
答案 22 :(得分:0)
为解决此问题,我在Debugging System.UnauthorizedAccessException (often followed by: Access to the path is denied)文章中采用了Scot Hanselman的方法,示例代码如下:
class Program
{
static void Main(string[] args)
{
var path = "c:\\temp\\notfound.txt";
try
{
File.Delete(path);
}
catch (UnauthorizedAccessException)
{
FileAttributes attributes = File.GetAttributes(path);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
attributes &= ~FileAttributes.ReadOnly;
File.SetAttributes(path, attributes);
File.Delete(path);
}
else
{
throw;
}
}
}
}
答案 23 :(得分:0)
我也遇到了同样的问题。看起来该文件正在使用中,因此无法对其进行写入。 尽管无法弄清楚,但哪个进程正在使用它。退出在该框中登录的其他用户,看不到持有它的任何用户。 有关如何查找相同内容的任何快速提示。
谢谢, Lakshay(开发人员)
答案 24 :(得分:0)
如果您使用的是BitDefender,则很有可能其安全文件功能会阻止您的操作。这是一种勒索软件保护形式,它具有一些更高级的版本。
确保在BitDefender中授予您的应用程序访问权限,然后重试。
更多详细信息可以在this BitDefender support page中找到。
答案 25 :(得分:0)
对于那些试图制作UWP(通用Windows)应用程序的用户,文件权限受到更多的限制,并且通常默认情况下被拒绝。它还会取代系统用户权限。您基本上只能访问其中一个文件
您可以在此处详细了解=> https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions
答案 26 :(得分:0)
我正在尝试使用System.IO.File.OpenWrite(path)
,它不起作用,因为我只向OpenWrite()传递了目录的路径,但是它始终需要一个路径,直到您要写入的文件。因此,需要将包含结尾的filename.extension的完整路径传递到OpenWrite中,以避免UnauthorizedAccessException
答案 27 :(得分:0)
在我的特定情况下,我反复创建和删除10000个文件夹。在我看来,问题在于尽管方法Directory.Delete(path, true)
返回了,但底层的OS机制仍可能正在从磁盘中删除文件。当我删除旧文件夹后立即开始创建新文件夹时,其中一些仍被锁定,因为它们尚未完全删除。而且我得到了System.UnauthorizedAccessException:“访问路径被拒绝”。
在Thread.Sleep(5000)
之后使用Directory.Delete(path, true)
解决了该问题。我绝对同意这是不安全的,并且我不鼓励任何人使用它。我想在这里找到一种更好的方法来解决此问题,以改善我的答案。现在我只是想知道为什么会发生这种异常。
class Program
{
private static int numFolders = 10000;
private static string rootDirectory = "C:\\1";
static void Main(string[] args)
{
if (Directory.Exists(rootDirectory))
{
Directory.Delete(rootDirectory, true);
Thread.Sleep(5000);
}
Stopwatch sw = Stopwatch.StartNew();
CreateFolder();
long time = sw.ElapsedMilliseconds;
Console.WriteLine(time);
Console.ReadLine();
}
private static void CreateFolder()
{
var one = Directory.CreateDirectory(rootDirectory);
for (int i = 1; i <= numFolders; i++)
{
one.CreateSubdirectory(i.ToString());
}
}
}
答案 28 :(得分:0)
在服务器上部署后尝试执行此操作时,我也遇到了同样的问题:
dirPath = Server.MapPath(".") + "\\website\\" + strUserName;
if (!Directory.Exists(dirPath))
{
DirectoryInfo DI = Directory.CreateDirectory(dirPath);
}
string filePath = Server.MapPath(".") + "\\Website\\default.aspx";
File.Copy(filePath, dirPath + "\\default.aspx", true);
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal);
我将IIS中的权限授予包括管理员在内的其他组,我的问题得到了解决。
答案 29 :(得分:0)
我发现在DESIGN MODE中可能会发生此错误而不是?执行模式...... 如果你正在做一些事情,比如创建一个需要访问.INI或.HTM文件(配置文件,帮助文件)的类成员,你可能不想初始化声明中的项目,但稍后在FORM_Load()等中初始化它。 ... 初始化时...使用保护IF语句:
/// <summary>FORM: BasicApp - Load</summary>
private void BasicApp_Load(object sender, EventArgs e)
{
// Setup Main Form Caption with App Name and Config Control Info
if (!DesignMode)
{
m_Globals = new Globals();
Text = TGG.GetApplicationConfigInfo();
}
}
这将使MSVS Designer在设计模式下不会尝试创建INI或HTM文件。
答案 30 :(得分:0)
当我尝试在移动或创建文件夹后非常快速地重命名文件夹时,我抛出了这个错误。
一个简单的System.Threading.Thread.Sleep(500);
解决了它:
void RenameFile(string from, string to)
{
try
{
System.IO.File.Move(from, to)
}
catch
{
System.Threading.Thread.Sleep(500);
RenameFile(from, to);
}
}