这是个把指定路径下的所有目录(包含子目录)下以txt为扩展名的文件,重命名为"李宇春.txt" 所发生的问题。程序中使用@d程序正常运行。只是不支持中文目录.但以其他形式的设置路径就出错。望大侠门指点。谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;namespace d5
{    class Program
    {
        static  void DirSearch(string sDir)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    string sbdir ="@"+"\"" + d + "\""; //这里为了将d改成@"e:\mywork\xxx "的形式                    DirectoryInfo di = new DirectoryInfo(sbdir);//这样会出错,显示:路径具有非法字符
                    
                    // DirectoryInfo di = new DirectoryInfo(@d);这里直接使用@d就不出错。但系对"中文目录"就无法更改里面的txt,英文或数字开头的没有问题
                   
                   foreach (FileInfo fi in di.GetFiles("*.txt"))
                    {
                        fi.MoveTo(Path.Combine(fi.DirectoryName, "李宇春" + fi.Extension));
                    }
                    Console.Write(sbdir.ToString()); //这个为了测试时查看路径,没用的
                    
                    Console.ReadLine();//这个为了测试时查看路径,没用的
               
                    DirSearch(d);
                }
            }
            catch (System.Exception excpt)
            {
                Console.WriteLine(excpt.Message);
                Console.ReadLine();
            }
        }        static void Main(string[] args)
        {
            DirSearch(@"e:\mywork"); //设置你硬盘指定的目录        }
    }}   
       
    

解决方案 »

  1.   

     string sbdir ="@"+"\"" + d + "\""; //这里为了将d改成@"e:\mywork\xxx "的形式 这句话里"@"是具体的字符。 你要理解 @"c:\"  和 "@c:\"  是不一样的,就明白为什么是非法路径了。
      

  2.   

    把程序改成
     string sbdir ="\"" + d + "\""; 
    DirectoryInfo di = new DirectoryInfo(@sbdir);
    也是出错如何修改才能在中文目录也能使用?
      

  3.   

    拜托楼主,你加那个 @ 干吗用阿,@只是告诉 compiler 不要做字符串转义而已,操作系统哪见过这阵势阿
      

  4.   

    改为:string sbdir =@+"\"" + d + "\""; //这里为了将d改成@"e:\mywork\xxx "的形式 
    也就是去掉@的引号