搜索可移动磁盘里所有的jpg文件,并且复制到c:\temp下详细代码

解决方案 »

  1.   

    你可以用Directory.GetFiles来低轨查找所有jpg文件。
    至于copy,有File.Copy方法来完成。
    可以参看
    http://blog.csdn.net/knight94/archive/2006/03/27/640153.aspx
    http://community.csdn.net/Expert/TopicView3.asp?id=4756152至于如何获得移动硬盘的盘符,可以参看
    http://blog.csdn.net/knight94/archive/2006/03/31/645367.aspx
      

  2.   

    UpFilesDir = "upload/"Sub CreateFilesTable()
            Dim theFile() As FileInfo
            Dim theFolder As DirectoryInfo
            Dim TruePath As String = Server.MapPath(UpFilesDir)
            theFolder = New DirectoryInfo(TruePath)        If Directory.Exists(TruePath) = False Then
                Response.Write("没有找到文件夹!")
                Exit Sub
            End If        theFile = FilterForFiles(theFolder.GetFiles())        Dim tmpFile As FileInfo        For Each tmpFile In theFile
                system.io.file.copy("原文件路径","新文件路径")
            Next    End Sub
        Function FilterForFiles(ByVal TmpFiles() As FileInfo) As FileInfo()
            Dim newTmpFiles As New ArrayList(TmpFiles.Length)
            Dim i As Integer
            For i = 0 To TmpFiles.Length - 1
                If Path.GetExtension(TmpFiles(i).Name.ToLower) = ".jpg" OrElse _
                   Path.GetExtension(TmpFiles(i).Name.ToLower) = ".jpeg" OrElse _
                   Path.GetExtension(TmpFiles(i).Name.ToLower) = ".png" OrElse _
                   Path.GetExtension(TmpFiles(i).Name.ToLower) = ".bmp" OrElse _
                   Path.GetExtension(TmpFiles(i).Name.ToLower) = ".gif" Then
                    newTmpFiles.Add(TmpFiles(i))
                End If
            Next
            Return CType(newTmpFiles.ToArray(GetType(FileInfo)), FileInfo())
        End Function
      

  3.   

    string UpFilesDir = "upload/";public void  CreateFilesTable()
    {
            FileInfo[] theFile;
            DirectoryInfo  theFolder;
            string  TruePath  = Server.MapPath(UpFilesDir);
            theFolder =new DirectoryInfo (TruePath);        if (System.IO.Directory.Exists(TruePath) == false)
        {
                Response.Write("没有找到文件夹!");
                return;
        }        theFile = FilterForFiles(theFolder.GetFiles());                foreach (FileInfo tmpFile in theFile)
            {
                System.IO.File.Copy ("原文件路径","新文件路径");
            }}    
            
     public FileInfo[] FilterForFiles(FileInfo []TmpFiles )
        {
            System.Collections.ArrayList newTmpFiles = new  System.Collections.ArrayList(TmpFiles.Length);
            int i ;
            for( i = 0;i<=TmpFiles.Length - 1;i++)
            {
                if( Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".jpg" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".jpeg" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) ==".png" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".bmp" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".gif")
                    {
                        newTmpFiles.Add(TmpFiles[i]);
                    }        }
            return newTmpFiles; //这里不知道怎么转
        }
      

  4.   

    //Server 服务器路径?
    //Response 客户页,晕,是ASP.NET
    string UpFilesDir = "upload/";public void  CreateFilesTable()
    {
            FileInfo[] theFile;
            DirectoryInfo  theFolder;
            string  TruePath  = Server.MapPath(UpFilesDir);
            theFolder =new DirectoryInfo (TruePath);        if (System.IO.Directory.Exists(TruePath) == false)
        {
                Response.Write("没有找到文件夹!");
                return;
        }        theFile = FilterForFiles(theFolder.GetFiles());                foreach (FileInfo tmpFile in theFile)
            {
                System.IO.File.Copy ("原文件路径","新文件路径");
            }}    
            
     public FileInfo[] FilterForFiles(FileInfo []TmpFiles )
        {
            //System.Collections.ArrayList newTmpFiles = new  System.Collections.ArrayList(TmpFiles.Length);
            int i ;
            FileInfo[] files;
            files=new FileInfo[TmpFiles.Length];        for( i = 0;i<=TmpFiles.Length - 1;i++)
            {
                if( Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".jpg" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".jpeg" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) ==".png" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".bmp" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".gif")
                    {
                        //newTmpFiles.Add(TmpFiles[i]);
                        files[i]=TmpFiles[i];                }        }
         
         
            return files ;
        }
      

  5.   

    老大,操作底层当然是winfrom了,弄个asp.net的。晕我用不起来
      

  6.   

    搜索可移动磁盘时,要能搜索文件夹中的子文件,只搜索.jpg的文件可移动磁盘不只一个,不过要一起搜索
    分数不够的话,我再加
      

  7.   

    我说兄弟啊~变通一下嘛...
    string UpFilesDir = "upload/";//你要搜索的路径public void  CreateFilesTable()
    {
            FileInfo[] theFile;
            DirectoryInfo  theFolder;
            //string  TruePath  = Server.MapPath(UpFilesDir);
            theFolder = new DirectoryInfo(UpFilesDir);        if (System.IO.Directory.Exists(UpFilesDir) == false)
        {
                System.Windows.Forms.MessageBox.Show("没有找到文件夹!");
                return;
        }        theFile = FilterForFiles(theFolder.GetFiles());                foreach (FileInfo tmpFile in theFile)
            {
                System.IO.File.Copy("原文件路径", "新文件路径");//把"原文件路径" "新文件路径"自己替换
            }}    
            
     public FileInfo[] FilterForFiles(FileInfo []TmpFiles )
        {
            //System.Collections.ArrayList newTmpFiles = new  System.Collections.ArrayList(TmpFiles.Length);
            int i ;
            FileInfo[] files;
            files=new FileInfo[TmpFiles.Length];        for( i = 0;i<=TmpFiles.Length - 1;i++)
            {
                if( Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".jpg" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".jpeg" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) ==".png" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".bmp" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".gif")
                    {
                        //newTmpFiles.Add(TmpFiles[i]);
                        files[i]=TmpFiles[i];                }        }
         
         
            return files ;
        }
      

  8.   

    去掉
    ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) ==".png" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".bmp" ||
                   Path.GetExtension(TmpFiles[i].Name.ToLower()) == ".gif"
      

  9.   

    搜索所有可移动磁盘时,要能搜索文件夹中的子文件,只搜索.jpg的文件,复制到c:\temp下求完整的可运行的代码,我再加分,...等待中....
      

  10.   

    VirtualDesktop(吴滂) 兄弟不是我不给分,
    而是问题还没有解决你们的那个代码我早就有了,我的难点是要搜索文件夹包括子文件夹中的jpg,对所有可移动磁盘一次性搜索/复制。你的代码根本不能解决问题。
      

  11.   

    那段代码只是翻译上面的啊
    我自己有段VB的,但是不知道怎么翻译成C#
    你等多会吧~
      

  12.   

    连VB.NET的代码都不会看,还要求别人给你转成C#。shabi吧你。还有,那个什么“操作底层当然是winfrom了,弄个asp.net的”baichi呀,你是zhu一样,还winfrom,唉,baichi,winform 行吗,什么叫操作底层,晕死.................最底层是tmd汇编,你去操作看看。唉,浪费我的时间来教育你,就不用给分了。tmdshabi
      

  13.   

    //复制srcDir文件夹下的jpg文件到desDir文件夹(含所有子文件夹)
    public static void CopyDir(string srcDir,string desDir)
    {
        if(!Directory.Exists(desDir))
        {
            Directory.CreateDirectory(desDir);
        }
        DirectoryInfo rootDi = new DirectoryInfo(srcDir);    //遍历文件
        FileInfo[] afi = rootDi.GetFiles();
        for(int i=0;i<afi.Length;i++)
        {
            FileInfo fi = afi[i];
            if(Path.GetExtension(fi.Name.ToLower) = ".jpg")
    {
                    fi.CopyTo(desDir+"\\"+fi.Name,true);
            }
        }    //遍历子目录,递归调用以copy子目录
        DirectoryInfo[] adi = rootDi.GetDirectories();
        for(int i=0;i<adi.Length;i++)
        {
            DirectoryInfo di = adi[i];
            CopyDir(di.FullName,desDir+"\\"+di.Name);
        }
    }
      

  14.   

    //调用
    CopyDir(可移动磁盘盘符(如"G:\"),"c:\temp");
      

  15.   

    //得到可移动盘符//工程引用Windows.Management。
        public enum DRIVE_TYPE:int
        {
            REMOVABLE       = 2,
            LOCALDISK       = 3,
            NETDRIVE            = 4,
            CDROM           = 5,
        }
        public ArrayList GetAllNetDriveName()    {
            string strQuery = string.Format( "SELECT * From Win32_LogicalDisk WHERE DriveType = {0}", (int)( DRIVE_TYPE.NETDRIVE) );
            ManagementObjectSearcher query = new ManagementObjectSearcher(strQuery);
            ManagementObjectCollection queryCollection = query.Get();
            ArrayList arrNetDriveName = new ArrayList();
            foreach ( ManagementObject mo in queryCollection)
                arrNetDriveName.Add( mo["Name"].ToString() );
            return arrNetDriveName;
        }
      

  16.   

    楼上正解,果然不同凡响
    但是如果文件一多,就会很慢的
    我原来打算用api findfirstfile findnextfile 的
      

  17.   

    老大,我试过你留的这段代码:
    //复制srcDir文件夹下的jpg文件到desDir文件夹(含所有子文件夹)
    public static void CopyDir(string srcDir,string desDir)
    {
    if(!Directory.Exists(desDir))
    {
    Directory.CreateDirectory(desDir);
    }
    DirectoryInfo rootDi = new DirectoryInfo(srcDir);//遍历文件
    FileInfo[] afi = rootDi.GetFiles();
    for(int i=0;i<afi.Length;i++)
    {
    FileInfo fi = afi[i];
    if(Path.GetExtension(fi.Name.ToLower) = ".jpg")
    {
    fi.CopyTo(desDir+"\\"+fi.Name,true);
    }
    }//遍历子目录,递归调用以copy子目录
    DirectoryInfo[] adi = rootDi.GetDirectories();
    for(int i=0;i<adi.Length;i++)
    {
    DirectoryInfo di = adi[i];
    CopyDir(di.FullName,desDir+"\\"+di.Name);
    }
    }
    很不错,只不过也把srcDir文件夹下的子文件夹复制到desDir文件夹了,可以再改一下,直接复制srcDir下及子文件夹下所有jpg到desdir文件夹根下吗?
      

  18.   

    //直接复制srcDir下及子文件夹下所有jpg到desdir
    CopyDir(di.FullName,desDir+"\\"+di.Name);
    这一句改为
    CopyDir(di.FullName,desDir);
    就可以了
      

  19.   

    还有这个
    //得到可移动盘符//工程引用Windows.Management。
        public enum DRIVE_TYPE:int
        {
            REMOVABLE       = 2,
            LOCALDISK       = 3,
            NETDRIVE            = 4,
            CDROM           = 5,
        }
        public ArrayList GetAllNetDriveName()    {
            string strQuery = string.Format( "SELECT * From Win32_LogicalDisk WHERE DriveType = {0}", (int)( DRIVE_TYPE.NETDRIVE) );
            ManagementObjectSearcher query = new ManagementObjectSearcher(strQuery);
            ManagementObjectCollection queryCollection = query.Get();
            ArrayList arrNetDriveName = new ArrayList();
            foreach ( ManagementObject mo in queryCollection)
                arrNetDriveName.Add( mo["Name"].ToString() );
            return arrNetDriveName;
        }
    我用arrNetDriveName.count 得到的数据为0,我要使用盘符该如何用?  新手请各位老大帮帮忙不要笑话