重命名目录会在我第二次重命名时锁定重命名的 dir

2024-02-18

我在多次重命名目录时遇到问题,它似乎锁定了文件。

// e comes from a objectListView item
DirectoryInfo di = (DirectoryInfo)e.RowObject;
DirectoryInfo parent = Directory.GetParent(di.FullName);
String newPath = Path.Combine(parent.FullName, e.NewValue.ToString());

// rename to some temp name, to help change lower and uppercast names
di.MoveTo(newPath + "__renameTemp__");
di.MoveTo(newPath);

// Trying to cleanup to prevent directory locking, doesn't work...
di = null;
parent = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);

非常感谢任何帮助,因为第一次重命名工作正常,但是当尝试对重命名的文件夹进行新重命名时,它会引发异常:

该进程无法访问该文件 因为它正在被另一个人使用 过程。第一次机会例外 发生类型“System.IO.IOException” 在 mscorlib.dll 中

因此,第一次重命名该文件夹有效,第二次抛出异常,我猜测应用程序锁定了新文件夹,但如何解决它?我应该能够重命名一个文件夹两次,对吗?


介绍

为了重现您的问题,我创建了以下方法:

private static string RenameFolder(string path, string newFolderName)
{
    DirectoryInfo di = new DirectoryInfo(path);
    DirectoryInfo parent = Directory.GetParent(di.FullName);
    String newPath = Path.Combine(parent.FullName, newFolderName);

    // rename to some temp name, to help change lower and uppercast names
    di.MoveTo(newPath + "__renameTemp__");
    di.MoveTo(newPath);

    return di.FullName;
}

当我像下面这样调用它时,它会起作用:

var path = @"C:\Temp\test";
var newPath = RenameFolder(path, "TESt");
newPath = RenameFolder(path, "Test1");

当我像下面这样调用它时,它不起作用:

var path = @"C:\Temp\test";
var newPath = RenameFolder(path, "TESt");
newPath = RenameFolder(newPath, "Test1");

两个调用之间的唯一区别是,在第一个版本中,我传递原始名称,即所有内容均为小写。在第二种情况下,我提供新名称,即除最后一个字母外的所有内容均为大写。甚至在两次通话之间睡了 20 秒RenameFolder并没有改变这一点。奇怪的!

Solution

如果我实施RenameFolder像这样,它在两种情况下都有效:

private static string RenameFolder(string path, string newFolderName)
{
    String newPath = Path.Combine(Path.GetDirectoryName(path), newFolderName);

    // rename to some temp name, to help change lower and uppercast names
    Directory.Move(path, newPath + "__renameTemp__");
    Directory.Move(newPath + "__renameTemp__", newPath);

    return newPath;
}

不知何故,DirectoryInfo似乎在路径上有一个区分大小写的锁。

解释
我没有,也许有人对内部方式有更多的了解DirectoryInfo可以阐明这种奇怪的行为。

很重要的一点
不要使用GC.Collect如果你不知道,你在做什么!通常情况下,你don't需要调用这个方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重命名目录会在我第二次重命名时锁定重命名的 dir 的相关文章

  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 将 C/C++ 代码从 Linux 移植到 Windows 的最佳环境

    我想让我的一个大项目可以在 Windows 平台上构建 该项目本身是用 C C 编写的 遵循 POSIX 标准 具有一些库依赖项 例如 libxml2 libcurl 等 我更像是一名 Linux 开发人员而不是 Windows 开发人员
  • 升级到 Azure SDK 2.6 后无法在 Windows 通用应用程序中加载共享“项目”

    我刚刚安装了2015 年 4 月发布 Azure SDK http azure microsoft com en gb downloads archive net downloads 它是 2 6 版本 之前我使用的是 2 5 版本 现在我
  • 将整个数据库的空字符串更新为 NULL

    我正在执行一些数据库清理 并注意到有很多列在各个列中同时具有空字符串和 NULL 值 是否可以编写一条 SQL 语句来将数据库中每个表的每一列的空字符串更新为 NULL 除了不允许 NULL 的列之外 我看过information sche
  • 仅在我为 GoogleCredential 对象设置了 setServiceAccountUser() 之后才出现 NullPointerException (Grails/Java)

    我收到一个NullPointerException当我尝试时 细节很少setServiceAccountUser ACCOUNT TO IMPERSONATE on my GoogleCredential 构建一个 Google 任务服务对
  • 如何从 Action Script 3.0 获知 Flash Player 版本

    有没有办法知道使用 Action Script 3 0 运行 SWF 文件的计算机上安装的 Flash 播放器版本 如果您在 IDE 中编程 则以下内容将为您提供版本 trace Capabilities version 如果您正在构建自定
  • Python ctypes - 接受结构的 dll 函数崩溃

    我必须在 ms windows xp 下访问 POS 终端 我正在使用Python 2 7 我加载的 DLL 中用于付款的关键函数接受两个指向结构的指针 但它崩溃并返回 1 通信错误 但没有进一步的消息 请注意 当调用支付函数时 并非 PO
  • 在 C++ 中, std::multiset 是否保持稳定的排序顺序?

    假设我有两个项目 a 和 b 它们比较相同 所以 a 我检查了一些参考资料 但找不到答案 我很想认为没有任何保证 并且取决于每个特定的实现 Thanks 这个线程 https web archive org web 201305091636
  • 自定义安装处理程序的 Eclipse p2 替代方案

    在 p2 之前 人们可以编写一个自定义安装处理程序 该处理程序具有在安装过程中执行任何 自定义 任务的功能 我发现 p2 不再支持自定义安装处理程序 我不断听说 自定义接触点 正在取代它 但是我找不到任何具体的示例 文档 谁能告诉我如何使用
  • 如何在预发布测试中从 TestFlight 应用程序检索崩溃日志

    我一直在尝试获取通过 iTunes Connect TestFlight 分发的应用程序的崩溃报告 但无法找到它们 我找到了这个线程 https stackoverflow com questions 29408003 test fligh
  • 如何在 Telegram 中应答回调查询后发送消息?

    我正在尝试用 PHP 开发一个 Telegram 机器人 但当用户按下内联按钮时 我无法让我的机器人回答用户 有人可以帮我发消息吗 sendMessage方法 调用后answerCallback method 这是我最后的试用代码 if c
  • 在 spritekit 中沿着 UIBezierPath 绘制节点

    我目前正在 spritekit 中开发一款游戏 其中有游戏关卡地图 我正在使用 UIBezierPath 作为我希望关卡节点遵循的路径 我遇到的唯一问题是尝试沿路径绘制它们 并且想知道如何将它们添加到场景中 以便将它们添加到路径中每一个都与
  • 如何修复:使用 nginx 反向代理时收到 RST_STREAM,错误代码为 2

    我目前正在树莓派上使用dialogflow api 使用 grpc 调用 StreamingDetectIntent 方法时一切正常 我必须在我的产品上使用多个 api 因此 我尝试在它们前面放置一个反向代理 这样我就只能调用一个地址 我正
  • 测试监听 webhook 的 Laravel 路由

    似乎我在这里遗漏了一些东西 但我正在努力为集成 SendOwl webhook 的 Laravel 实现测试 这是我正在使用的文档 https help sendowl com help using web hooks https help
  • 分发java应用程序

    我最近开发了一些java应用程序 我希望其他人可以在他们的机器上运行 我做了一些研究 现在知道要分发 java 代码 您需要创建 jar 文件 好吧 我这样做了 但是当我分发这些文件时 它在某些计算机上运行 但在其他计算机上它返回一个错误
  • 图(图表)算法

    有人有计算轴最小值和最大值的不错的算法吗 当为给定的一组数据项创建图表时 我希望能够给出算法 集合中的最大值 y 集合中的最小值 y 轴上显示的刻度线数量 一个可选值must显示为勾号 例如 显示 ve 和 ve 值时为零 该算法应该返回
  • 如何从 Node.js 应用程序访问浏览器的窗口对象?

    我正在尝试编写一个简单的应用程序来监视文件更改并自动在浏览器中重新加载更新的代码 我知道 livereload nodeamon 和其他的存在 我只是想编写自己的 我已经创建了服务器 让它读取我想要读取的文件 调用观察程序 当监视文件中发生
  • Android 如何读取 BLE 属性 可读 可写 可通知 GATT 特性

    如何阅读BluetoothGattCharacteristic属性如特征Readable Writable or Notifiable return Returns b true b if property is writable publ
  • 下载管理器 - 限制下载速度[重复]

    这个问题在这里已经有答案了 我需要为我的文件下载器应用程序实施下载速率限制 并且我查看了ThrottledStream来自 CodeProject 的类 但这在我的情况下不起作用 因为我必须能够在下载过程中更改限制 而不仅仅是在开始时 这是
  • Ghostscript 多页 PDF 转 PNG

    我一直在使用 Ghostscript 从 pdf 中生成单个页面的 pdf 图像 现在我需要能够从 pdf 中提取多个页面并生成一个长垂直图像 我是否缺少一个可以允许这样做的论点 到目前为止 当我调用 Ghostscript 时 我使用以下
  • 重命名目录会在我第二次重命名时锁定重命名的 dir

    我在多次重命名目录时遇到问题 它似乎锁定了文件 e comes from a objectListView item DirectoryInfo di DirectoryInfo e RowObject DirectoryInfo pare