2011-11-16 62 views
0

我有一个程序,将文件或文件夹重命名为小写名称。文件或文件夹重命名为小写在C#中使用DirectoryInfo/FileInfo.MoveTo()

我写了这个代码:

private void Replace(string FolderLocation, string lastText, string NewText) 
    { 
     if (lastText == "") 
     { 
      lastText = " "; 
     } 
     if (NewText == "") 
     { 
      NewText = " "; 
     } 

     DirectoryInfo i = new DirectoryInfo(FolderLocation); 
     string NewName = ""; 
     if (checkBox2.Checked) 
     { 
      if (i.Parent.FullName[i.Parent.FullName.Length - 1].ToString() != "\\") //For parents like E:/ 
      { 
       NewName = i.Parent.FullName + "\\" + i.Name.Replace(lastText, NewText); 
      } 
      else 
      { 
       NewName = i.Parent.FullName + i.Name.Replace(lastText, NewText); 
      } 

       NewName = NewName.ToLower(); 


      if (NewName != i.FullName) 
      { 
       i.MoveTo(NewName); 
      } 
      foreach (DirectoryInfo sd in i.GetDirectories()) 
      { 
       Replace(sd.FullName, lastText, NewText); 
      } 
     } 
     if (checkBox1.Checked) 
     { 
      foreach (FileInfo fi in i.GetFiles()) 
      { 
       NewName = fi.Directory + "\\" + fi.Name.Replace(lastText, NewText); 

        NewName = NewName.ToLower(); 

       if (NewName != fi.FullName) 
       { 
        fi.MoveTo(NewName); 
       } 
      } 
     } 
    } 

,但我得到一个异常: “源和目标路径必须是不同的”

我该如何解决这个问题?

+3

就文件名而言,Windows不区分大小写。 – Oded

+0

ok.but它如何显示文件名? –

+0

它使用保存的内容。但是,在比较文件名时 - “FILENAME”==“文件名”==“文件名”',就其而言。 – Oded

回答

4

由于Windows不区分大小写,就文件名而言,您需要将文件重命名为临时名称,然后使用小写字符重新命名。

+0

现在我得到了“访问被拒绝”eception.but我运行它作为管理员。发生了什么? –

+0

@ahmadalishafiee - “访问被拒绝”总是意味着缺乏权限。确保路径被允许执行应用程序的用户(可能是您的用户)。 – Oded

+0

这意味着无法访问程序的文件/文件夹,但我想发布我的程序。如何修复此错误? –

2

虽然Windows文件系统存储名称的情况下,senstivie他们的行为不区分大小写的名称比较这样的重命名操作将无法正常工作......

如果你真的需要/想这样做,你需要先重新命名暂时将文件/目录设置为不同且唯一的内容,然后将其重命名为“返回”为所需的“小写名称”。

仅供参考,请参阅http://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspxhttp://support.microsoft.com/kb/100108/en-us

如果您需要NTFS区分大小写,您可以将dword ObCaseInsensitiveHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\设置为0(不推荐!)。

如果您正在处理NFS,请参阅http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspx

0

不幸的是,这是一个窗口问题,因为它是不区分大小写的,因为Oded在评论中提到。你需要做的是重命名文件夹两次。通过将文件夹移动到新的临时名称,然后回到原始名称的小写字母。

+1

这不是Windows问题,这是一个.Net问题。 Win32的MoveFileEx支持仅案例重命名; .Net得到这个错误。 – antiduh