gpt4 book ai didi

c# - 新创建文件的 UnauthorizedAccessException

转载 作者:可可西里 更新时间:2023-11-01 09:03:38 25 4
gpt4 key购买 nike

我有一个应用程序正在通过一些文件查找旧数据。为了确保我们不会破坏好的项目,我将文件复制到一个临时位置。我检查的一些目录是源代码目录,它们有 .svn 文件夹。我们使用 Subversion 来管理我们的代码。

搜索完所有文件后,我想删除临时缓存。听起来很简单,对吧?

出于某种原因,我所有的 .svn 目录都不会从缓存中删除。他们使应用程序崩溃。

由于某些原因(太深,无法在这里深入),我必须使用临时文件夹,因此出于政治原因,仅“扫描原始文件”是不可能的。

我可以进入资源管理器并删除它们。没问题。没有警告。只是删除。但代码因“拒绝访问 {file}”而崩溃。我对此束手无策,因此我们将不胜感激。

虽然为了您的理智起见,我稍微简化了函数,但代码实际上就是这么简单。



List
    
      tmpCacheManifest = new List
     
      ();
      
string oldRootPath = "C:\\some\\known\\directory\\";
string tempPath = "C:\\temp\\cache\\";

foreach(ListOfFilesToScan 中的字符串文件)
{
string newFile = file.Replace(oldRootPath, tempPath);

//这很好用。
文件复制(文件,新文件);

tmpCacheManifest.add(新文件);
}

//... 对缓存做一些事情来验证我需要什么。


//好的..我完成了..删除缓存。
foreach(tmpCacheManifest 中的字符串文件)
{
//碰撞!
文件.删除(文件);
}

*更新*:异常是UnauthorizedAccessException。文本是“访问路径 'C:\temp\cache\some-sub-dirs\.svn\entries' 被拒绝。”

它发生在 XP、XP-Pro 和 Windows 7 下。

* 更新 2 * 我的验证都没有尝试查看颠覆文件。然而,我确实需要它们。这是政治废话的一部分。我必须证明每个文件都被复制了……不管它是否被扫描。

我意识到 File.Delete 的常见嫌疑人是什么。我知道 UnauthorizedAccessException 是什么意思。我无权访问。这很简单。但是我只是复制了文件。我怎样才能访问该文件?

* 更新 3 *答案在“只读”标志中。这是我用来修复它的代码:



 foreach(ListOfFilesToScan 中的字符串文件)
{
string newFile = file.Replace(oldRootPath, tempPath);

//这很好用。
文件复制(文件,新文件);

////新代码////
//清除任何“只读”标志
文件信息 fi3 = 新文件信息(fn);
如果 ((fi3.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
fi3.Attributes = (FileAttributes)(Convert.ToInt32(fi3.Attributes) - Convert.ToInt32(FileAttributes.ReadOnly));
}



tmpCacheManifest.add(新文件);
}

//... 对缓存做一些事情来验证我需要什么。

最佳答案

据我所知,Subversion 将其 .svn 子目录中的文件标记为只读。

在删除文件之前尝试重置只读属性。我真的不懂任何 C#,但快速谷歌一下表明这可能会成功:

File.SetAttributes(file, FileAttributes.Normal);

关于c# - 新创建文件的 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2007353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com