C# - 重命名目录的方法[重复]

2024-01-24

我在用着Directory.Move(oldDir, newDir)重命名目录。我时不时地得到一个IOException说“访问路径‘oldDir’被拒绝”。但是,如果我右键单击资源管理器中的目录,我可以重命名它,没有任何问题。

所以我的问题是:有没有其他方法可以重命名目录而不使用Directory.Move?

我想到使用命令外壳(Process.Start())但这应该是我这样做的最后一种方式。


更多细节

该程序仍在运行,我收到异常,并且可以在 Windows 资源管理器中手动重命名它(右键单击 -> 重命名),同时我的光标暂停在 catch 块中的断点上。我也尝试在以下位置设置断点Directory.Move,成功地在资源管理器中重命名了目录(并再次返回),跨过Directory.Move并最终在catch (IOException) again.

这是我的代码

public bool Copy()
{
    string destPathRelease = ThisUser.DestPath + "\\Release";

    if (Directory.Exists(destPathRelease))
    {
        try
        {
            string newPath = ThisUser.DestPath + '\\' + (string.IsNullOrEmpty(currBuildLabel) ? ("Release" + '_' + DateTime.Now.ToString("yyyyMMdd_HHmmss")) : currBranchName) + '.' + currBuildLabel;
            Directory.Move(destPathRelease, newPath);
        }   
        catch (IOException)
        {
           // Breakpoint
        }
    }
}

正如你所看到的,我刚刚输入了该方法。我以前从未接触过程序中的目录。

由于这种方法不适合我,我需要找到另一种方法来做到这一点。


Solution

public bool Copy()
{
    string destPathRelease = ThisUser.DestPath + "\\Release";

    SHFILEOPSTRUCT struc = new SHFILEOPSTRUCT();

    struc.hNameMappings = IntPtr.Zero;
    struc.hwnd = IntPtr.Zero;
    struc.lpszProgressTitle = "Rename Release directory";
    struc.pFrom = destPathRelease + '\0';
    struc.pTo = ThisUser.DestPath + '\\' + (string.IsNullOrEmpty(this.currBuildLabel) ? ("Release" + '_' + DateTime.Now.ToString("yyyyMMdd_HHmmss")) : this.currBranchName) + '.' + this.currBuildLabel + '\0';
    struc.wFunc = FileFuncFlags.FO_RENAME;

    int ret = SHFileOperation(ref struc);
}

请注意,使用它很重要pTo and pFrom作为零分隔双零终止的字符串。


您可以尝试使用 P/Invoke 来调用SHFileOperation http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164%28v=vs.85%29.aspxAPI(或IFileOperation http://msdn.microsoft.com/en-us/library/windows/desktop/bb775771%28v=vs.85%29.aspx界面)。这就是 Explorer 理论上所使用的,因此它应该更直接地复制功能。

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

C# - 重命名目录的方法[重复] 的相关文章

随机推荐

  • Htaccess缓存问题

    这让我彻底疯了 我一直在这个新安装的服务器上使用 URL 重写来自定义 URL 但似乎我在 htaccess 中编写的任何 URL 重写规则都将永远被考虑在内 Example RewriteRule dashboard calendar c
  • Node.js 应用程序在 Heroku 上不断崩溃,并给出错误 Boot timeout

    我正在开发一个示例 node js 应用程序 它在本地运行良好 node index js 但是 当我将其推送到 Heroku 实例时 它崩溃并出现以下错误 2017 10 23T06 08 07 000000 00 00 app api
  • sqlalchemy 中的点类型?

    我在 Postgres 中发现了关于 Point 类型的信息 http www postgresql org docs current interactive datatype geometric html http www postgre
  • 如何序列化邮件消息?

    当尝试使用 los 格式化程序序列化 Gmail 消息时 我收到以下信息 错误 Sys WebForms PageRequestManagerServerErrorException 序列化 System Net Mail MailMess
  • 如果有多个iis服务器,如何实现SignalR?

    使用 SignalR 时是否支持 iis 节点集群 或者我需要一些第三方消息总线吗 还没有 但他们正在努力 计划发布 0 4 版本 准备就绪后 更多信息可能会在 wiki 中发布 SignalR 和 Webfarms http github
  • 在 Tab 单击事件上禁用 TabView 动画?

    我怎样才能禁用TabView动画时Tab in TabBar点击 我添加了 physics NeverScrollableScrollPhysics 对于 TabView 但不适用于 TabBar 我在用着DefaultTabControl
  • toLocaleDateString Javascript日期格式问题[重复]

    这个问题在这里已经有答案了 我有一个脚本 我想将日期格式化为短日期格式 即 2013 年 7 月 3 日或 2013 年 7 月 3 日 第一个日期格式的呈现方式与 Chrome 中的呈现方式类似 但其他浏览器则不然 它显示日期 月份名称和
  • 在多个程序集中定义的 System.Tuple

    我刚刚在 Windows 8 中安装了 VS 11 当我获得使用 VS 2010 构建的最新解决方案 然后构建它时 我收到此错误 在 VS 11 中 预定义类型 System Tuple 在多个程序集中定义 在全局别名中 使用 c Prog
  • 非全屏时保存 WebBrowser 控件截图

    我得到了 WebBrowser 控件中包含的网页的屏幕截图 正如所描述的那样here http www dreamincode net code snippet3389 htm and here https stackoverflow co
  • MySQL 错误:“列计数与第 1 行的值计数不匹配” - 初学者帮助

    基本上 使用的是 php 和 MySQL 我是初学者 我想做的是将用户注册到我的数据库中 因此将表单输入存储到我的 users tb 中 当我尝试将值插入表单时出现此错误 列计数与第 1 行的值计数不匹配 我认为这是因为我没有插入 user
  • Java:是否可以通过 Object(In|Out)putStreams 在阻塞 SocketChannel 上进行并发读取和写入?

    我创建了一个ObjectInputSteam and ObjectOutputStream在阻塞上SocketChannel我正在尝试同时读写 我的代码是这样的 socketChannel SocketChannel open destNo
  • Android:无法从 json 检索数据

    我从上一个活动到此活动获取某个事件的一个 id 并将该 id 传递到当前活动中的 url 以获取该 url 中存在的城市名称 我的代码是 String s getIntent getStringExtra ar try HttpPost h
  • 仅当“beforeunload”函数返回 true 时才运行 Javascript 代码

    当用户离开页面时 我使用 JQuery 捕获卸载事件 这工作得很好 但我只有在用户发生以下情况时才需要保存数据really想离开 这是我的第二十二条军规 如果我过早保存代码并且用户不想离开 那么我就破坏了支持代码的 Web 服务的状态 因此
  • Pandas:如何循环并删除列具有单个条目的行

    所以我有一个包含一定数量列的 pandas 数据框 下面是一个简单数据框的代码 但真正的数据框有超过 100 列 X pd DataFrame A Z A Z B Z columns COL1 COL2 我想要做的是遍历每一列并删除仅发生单
  • 使用位图进行 9830416 字节分配时内存不足

    我从资产文件夹中获取一些图像 但有一个例外 03 11 10 18 28 019 E dalvikvm heap 4052 Out of memory on a 9830416 byte allocation 我这里有这个错误 stream
  • Fortran 分配/解除分配

    我有以下问题 Fortran90 中分配 取消分配语句的实际开销是多少 即 在循环内分配几个中等大小的数组 例如 do i 1 1000 allocate tmp 20 tmp 1 20 1d0 call foo tmp deallocat
  • 小型 JavaScript 实现? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个极其微小的 Javascript 实现 也许是它的子集 代码大小和内存使用非常重要 速度不是问
  • django 文件上传:[Errno 13] 权限被拒绝:'/static'

    我正在尝试在 django 中上传多个文件 在我使用 django 内置服务器的本地计算机上 一切正常 但在我的生产力服务器上 我收到此错误 Errno 13 Permission denied static 关于这个问题有很多问题 但我发
  • PyCharm 中使用“Pandas”和“Seaborn”时出现类型错误

    我目前正在使用 Python 和 IDE PyCharm 来绘制在 pandas 和 seaborn 中生成的数据框 我正在应用以下代码 from matplotlib import pyplot as plt import pandas
  • C# - 重命名目录的方法[重复]

    这个问题在这里已经有答案了 我在用着Directory Move oldDir newDir 重命名目录 我时不时地得到一个IOException说 访问路径 oldDir 被拒绝 但是 如果我右键单击资源管理器中的目录 我可以重命名它 没