首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#中兑现递归文件拷贝(代码)

2013-01-09 
c#中实现递归文件拷贝(代码)//***********************************************************************

c#中实现递归文件拷贝(代码)

//**************************************************************************//        /*         //获得长路径的相对短路径名称        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]        public static extern uint GetShortPathName(string lpszLongPath, StringBuilder lpszShortPath, int cchBuffer);        //实现文件拷贝,递归逐文件拷贝        private void DirectoryCopy(string sourceDir, string targetDir)        {                        if (!Directory.Exists(sourceDir))            {                DialogResult OKButtonDown = MessageBox.Show("需要备份的路径不存在,请查看!", "备份失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);                if (DialogResult.OK == OKButtonDown)                {                    Application.Exit();                }            }                        string sourceFolderName = sourceDir.Replace(Directory.GetParent(sourceDir).ToString(), "").Replace(Path.DirectorySeparatorChar.ToString(), "");            if (sourceDir == targetDir + sourceFolderName)            {                DialogResult OKButtonDown = MessageBox.Show("备份的目标路径和原路径相同,不需要备份!", "备份失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);                if (DialogResult.OK == OKButtonDown)                {                    Application.Exit();                }             }            //得到要复制到的路径            string tagetPath = targetDir + Path.DirectorySeparatorChar.ToString() + sourceFolderName;            //检查目标路径            if (Directory.Exists(tagetPath))            {                DialogResult OKButtonDown = MessageBox.Show("备份的目标路径已经存在,点击是将删除目标并备份,点击否将覆盖并备份", "请查看", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);                if (DialogResult.Yes == OKButtonDown)                {                    Directory.Delete(tagetPath, true);                    //return;                }                else if (DialogResult.No == OKButtonDown)                {                    //复制文件                    string[] files1 = Directory.GetFiles(sourceDir);                    for (int i = 0; i < files1.Length; i++)                    {                        File.Copy(files1[i], tagetPath + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files1[i]), true);                    }                    //复制目录                    string[] dires1 = Directory.GetDirectories(sourceDir);                    for (int j = 0; j < dires1.Length; j++)                    {                        DirectoryCopy(dires1[j], tagetPath);                    }                    return;                }                else if (DialogResult.Cancel == OKButtonDown)                {                    Application.Exit();                }            }                       StringBuilder _shortPath1 = new StringBuilder(255);            uint result1 = GetShortPathName(tagetPath, _shortPath1, 255);            string MyShortPath1 = _shortPath1.ToString();            if (0 == result1)            {                Directory.CreateDirectory(tagetPath);            }            else            {                Directory.CreateDirectory(MyShortPath1);            }            //复制文件            string[] files3 = Directory.GetFiles(sourceDir);            for (int i = 0; i < files3.Length; i++)            {                //string longPath = tagetPath + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files3[i]);                //StringBuilder _shortPath = new StringBuilder(255);                //uint result = GetShortPathName(longPath, _shortPath, 255);                //string MyShortPath = _shortPath.ToString();                File.Copy(files3[i],/*MyShortPath/tagetPath + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files3[i]), true);            }            //复制目录            string[] dires3 = Directory.GetDirectories(sourceDir);            for (int j = 0; j < dires3.Length; j++)            {                string longPath = dires3[j];                StringBuilder _shortPath = new StringBuilder(255);                uint result = GetShortPathName(longPath, _shortPath, 255);                string MyShortPath = _shortPath.ToString();                DirectoryCopy(MyShortPath, tagetPath);            }        }*/
   /// <summary>        /// 更新新版本文件        /// </summary>  /*      private void NewFileCover(string NewDir , string OlDir)        {            if (!Directory.Exists(NewDir))            {                DialogResult OKButtonDown = MessageBox.Show("需要备份的路径不存在,请查看!", "备份失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);                if (DialogResult.OK == OKButtonDown)                {                    Application.Exit();                }            }            //Directory.CreateDirectory(OlDir);            //复制文件            string[] files3 = Directory.GetFiles(NewDir);            for (int i = 0; i < files3.Length; i++)            {                File.Copy(files3[i], OlDir + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files3[i]), true);            }            //复制目录            string[] dires3 = Directory.GetDirectories(NewDir);            for (int j = 0; j < dires3.Length; j++)            {                string longPath = dires3[j];                StringBuilder _shortPath = new StringBuilder(255);                uint result = GetShortPathName(longPath, _shortPath, 255);                string MyShortPath = _shortPath.ToString();               // DirectoryCopy(dires3[j], OlDir);                NewFileCover(MyShortPath, OlDir);            }         }        */


1楼ghevinn4小时前
辛辛苦苦弄了好久,终于可以实现了,可是遇到了不曾遇到的问题。这样的问题只能是付诸东流。n考虑其他的解决办法。n第一:使用Move方法,就是整个树形结构移动。n第二:开启进程,调用cmd实现。

热点排行