C#-重命名目录的方法
我正在使用C#-重命名目录的方法,c#,directory,rename,ioexception,C#,Directory,Rename,Ioexception,我正在使用Directory.Move(oldDir,newDir)重命名目录。我不时会收到一个IOException,上面说“访问路径'oldDir'被拒绝”。但是,如果我右键单击资源管理器中的目录,我可以重命名它,而不会出现任何问题 所以我的问题是:有没有其他方法可以在不使用目录的情况下重命名目录。移动 我曾想过使用命令shell(Process.Start()),但这应该是我做这件事的最后一种方法 进一步详情 程序仍在运行,我得到异常,可以在windows资源管理器中手动重命名它(右键单
Directory.Move(oldDir,newDir)
重命名目录。我不时会收到一个IOException
,上面说“访问路径'oldDir'被拒绝”。但是,如果我右键单击资源管理器中的目录,我可以重命名它,而不会出现任何问题
所以我的问题是:有没有其他方法可以在不使用目录的情况下重命名目录。移动
我曾想过使用命令shell(Process.Start()
),但这应该是我做这件事的最后一种方法
进一步详情
程序仍在运行,我得到异常,可以在windows资源管理器中手动重命名它(右键单击->重命名),同时我的光标暂停在catch块的断点上。我还尝试在目录中设置断点。Move
,成功地在explorer中重命名了目录(并再次返回),跨过目录。Move
,再次进入捕获(IOException)
这是我的密码
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
}
}
}
正如你所看到的,我刚刚输入了这个方法。我以前从未接触过程序中的目录
由于这种方式对我不起作用,我需要找到另一种方式来这样做
解决方案
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
和pFrom
作为以零分隔的双零结尾字符串非常重要。尝试使用DirectoryInfo.MoveTo()而不是Directory.Move()
此外,请检查:它似乎没有与您所发现的相同的异常,但您可以找到一些好的建议。您可以尝试使用p/Invoke调用API(或接口)。这是Explorer在理论上使用的,因此它应该更直接地复制功能。这可能是因为文件夹中的文件是只读的,并且具有一定的权限restricted@Habib不确定您想说什么,因为没有其他方法作为目录。请在此线程中移动@如果它们是只读的,为什么我可以在windows资源管理器中重命名它们@你们都读过完整的问题了吗?(没有任何恶意)@theknut你是从VisualStudio以管理员权限运行这段代码的吗?如果不是以管理员身份运行,请检查,并尝试向所有用户授予访问源文件夹和测试的完全权限。我的英雄!你怎么知道这些?只是好奇而已。。。