[愚翁专栏]用C#实现目录拷贝

转载 2006年05月18日 19:52:00

C#中没有直接的目录拷贝函数,所以需要遍历源目录,然后逐个目录和逐个文件进行拷贝。以下就是实现代码:

        /// <summary>

        /// Copy files from souce directory to dest directory

        /// </summary>

        /// <param name="SourceDir"></param>

        /// <param name="DestDir"></param>

        /// <returns></returns>

        private bool CopyFilesExt( string SourceDir, string DestDir )

        {

            string[] FileNames = Directory.GetFiles(SourceDir);

           

            // Copy files into dest dir

            // If file exists, then overwrite

            for(int i = 0; i < FileNames.Length; i++ )

                File.Copy( FileNames[i],

                    DestDir + FileNames[i].Substring( SourceDir.Length ), true );

            return true;

        }

 

        /// <summary>

        /// Copy sub-directories and files from directory to dest directory

        /// </summary>

        /// <param name="SourceDir"></param>

        /// <param name="DestDir"></param>

        /// <returns></returns>

        private bool CopyDirExt( string SourceDir, string DestDir )

        {

            DirectoryInfo diSource = new DirectoryInfo( SourceDir );

            DirectoryInfo diDest = new DirectoryInfo( DestDir );

            if( diSource.Exists )

            {

                // If dest directory doesn't exist, then create it;

                if( !diDest.Exists )

                    diDest.Create();

 

                // Copy files from source directory to dest directory

                if( CopyFilesExt( SourceDir, DestDir ) )

                {

                    string[] SubDirs = Directory.GetDirectories( SourceDir );

                    bool bResult = true;

 

                    // Copy sub-directories

                    for( int i = 0; i < SubDirs.Length; i++ )

                        if( !CopyDir( SubDirs[i] + @"/",

                            DestDir + SubDirs[i].Substring( SourceDir.Length ) + @"/" ) )

                            bResult = false;

 

                    return bResult;

                }

            }

            return false;

        }

 

       调用如下即可:

            strSourceDir = txtSourceDir.Text;

            strDestDir = txtDestDir.Text;

            if( strSourceDir[strSourceDir.Length-1] != '//' )

                strSourceDir += @"/";

            if( strDestDir[strDestDir.Length-1] != '//' )

                strDestDir += @"/";

 

            if( !CopyDirExt( strSourceDir, strDestDir ) )

                MessageBox.Show( "Directory copied failed!" );

            else

                MessageBox.Show( "Directory copied successfully!" );

 

       注意,我的CopyDirExt函数中的目录,是以“/”结束,因此要调用之前,需要根据需要进行补加字符“/”。


愚翁专栏学习

http://blog.csdn.net/knight94/ 
  • zym12021
  • zym12021
  • 2008年01月25日 10:38
  • 232

[愚翁专栏]图像旋转的C#示例

private void RotateTransform_Click(object sender, System.EventArgs e)        {            Graphics g...
  • MaybeHelios
  • MaybeHelios
  • 2006年05月18日 19:53
  • 853

实现多线程拷贝多级目录

 一、问题的提出Windows中文件夹的拷贝实现了单个文件到多级目录的拷贝,一般在处理大量数据拷贝之类耗时的操作,都会另外创建新的线程来处理。现在要编写一个多线程拷贝多级目录的程序,要求用多线程实现,...
  • mapper
  • mapper
  • 2007年12月05日 09:08
  • 1353

嵌入式开发第31、32天(项目2:用线程池实现大批量复制文件)

项目目标 1)在控制台调用程序输入 源文件 和目标文件,实现文件的完美复制。 2)即把文件的属性也复制了。 3)把批量的复制工作交给线程池去运行,体现多线程的效率。 4)在学会使用线程...
  • Reasonss
  • Reasonss
  • 2016年08月22日 01:38
  • 2459

Effective C#[转自愚翁]

 第一部分是语言使用的基础,而这是使用语言的基本功,也是平常最不注意的,养成好的习惯,有利于后期水平提高。这部分包括11个单元,分别如下:Item 1: Always Use Properties I...
  • jacobwc
  • jacobwc
  • 2006年08月21日 14:55
  • 611

用C#实现目录拷贝

在C#中没有直接的目录拷贝函数,所以需要遍历源目录,然后逐个目录和逐个文件进行拷贝。以下就是实现代码:        ///         /// Copy files from souce dir...
  • Knight94
  • Knight94
  • 2006年03月27日 15:21
  • 5560

[愚翁专栏]如何用C#做一个悬浮窗口程序

用C#做一个像FlashGet的悬浮窗口,其实很简单,不像以前需要调用很多系统API。大致的步骤如下。 首先是主窗体部分,即要判断窗体的状态来决定是否显示悬浮窗口。局部成员声明:    private...
  • MaybeHelios
  • MaybeHelios
  • 2006年05月18日 19:50
  • 1040

[愚翁专栏]如何使用Base64进行加密和解密

 如何使用Base64进行加密和解密 document.title="如何使用Base64进行加密和解密 - "+document.title其实Base64的加密和解密的算法不是很复杂,首先是定义自...
  • MaybeHelios
  • MaybeHelios
  • 2006年05月18日 20:06
  • 1020

基于linux下的线程池复制多级目录及文件

Linux下线程池拷贝文件、目录
  • badesir
  • badesir
  • 2017年08月18日 20:15
  • 168

linux c 实现目录拷贝

#include #include #include #include #include #include #include #ifndef DEBUG #def...
  • RICH_BABA
  • RICH_BABA
  • 2010年11月22日 11:48
  • 3857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[愚翁专栏]用C#实现目录拷贝
举报原因:
原因补充:

(最多只允许输入30个字)