C#:System.UnauthorizedAccessException:当 File.Move 或 File.Delete [重复] 时拒绝访问路径
Posted
技术标签:
【中文标题】C#:System.UnauthorizedAccessException:当 File.Move 或 File.Delete [重复] 时拒绝访问路径【英文标题】:C#: System.UnauthorizedAccessException: Access to path is denied When File.Move or File.Delete [duplicate] 【发布时间】:2021-05-11 18:15:00 【问题描述】:我需要创建小型控制台应用程序来将文件移动到单独的文件夹中。一切正常,我可以复制文件,直到我尝试 File.Move 或 File.Delete 文件,我捕获 System.UnauthorizedAccessException。我试过的
-
从代码更改文件夹权限
从 .Net Core 切换到 .Net Framework
通过右键->安全->高级手动添加文件夹权限
试图更改文件夹的只读属性(它总是恢复为只读,我无法解决这个问题)
我不知道我还能尝试什么以及如何解决这个问题。我写的代码如下
var pngFiles = Directory.GetFiles(@"C:\Users\MSI_PC\Desktop\Test", "*.png",
SearchOption.AllDirectories);
foreach (var pngFile in pngFiles)
Console.WriteLine(pngFile);
var fileName = Path.GetFileName(pngFile);
var newFolder = Path.Combine(@"C:\Users\MSI_PC\Desktop\Test",
Path.GetFileNameWithoutExtension(fileName));
Directory.CreateDirectory(newFolder);
var newFileName = Path.Combine(@"C:\Users\MSI_PC\Desktop\Test",
Path.GetFileNameWithoutExtension(fileName), fileName);
File.Copy(pngFile, newFileName, true); //yes, I can use move and have 1 line of code instead of 2. But I need file to be copied, and this line of code works fine
File.Delete(pngFile); // System.UnauthorizedAccessException. File.Move throws the same exception
【问题讨论】:
您正在更改文件夹权限,但我猜您的问题在于文件权限 可能是防病毒软件仍然打开文件来分析它,因为您只是从中读取。你说你可以使用 File.Move,这行得通吗?pngFile
的确切值是多少?
禁用防病毒软件是否有效?还是先休眠 20 秒再删除文件?
好吧,@LasseV.Karlsen 首先提到了它。 ;)
【参考方案1】:
试试这个代码
private void Copy()
var pngFiles = Directory.GetFiles(@"C:\Users\Administrator\Desktop", "*.png", SearchOption.AllDirectories);
foreach (var pngFile in pngFiles)
Console.WriteLine(pngFile);
var fileName = Path.GetFileName(pngFile);
var newFolder = Path.Combine(@"D:\NewPic\");
Directory.CreateDirectory(newFolder);
string DestPath = newFolder + "\\" + fileName;
byte[] buffer = new byte[2014 * 1024];
using (FileStream source = new FileStream(pngFile, FileMode.Open, FileAccess.Read, FileShare.Delete))
using (FileStream dest = new FileStream(DestPath, FileMode.CreateNew, FileAccess.Write, FileShare.Delete))
int currentBlockSize = 0;
while ((currentBlockSize = source.Read(buffer, 0, buffer.Length)) > 0)
dest.Write(buffer, 0, currentBlockSize);
dest.Close();
source.Close();
File.Delete(pngFile); // System.UnauthorizedAccessException. File.Move throws the same exception
【讨论】:
感谢您的帮助,但它不起作用。在 File.Delete 上引发异常 我为您的问题发送了另一种方法。但是朋友说你也什么都不要。您可以使用流文件复制和删除数据。如果你愿意,我会发给你。 如何使用文件流删除文件? 文件是流式复制的,但删除方法相同以上是关于C#:System.UnauthorizedAccessException:当 File.Move 或 File.Delete [重复] 时拒绝访问路径的主要内容,如果未能解决你的问题,请参考以下文章