C#将文件复制到指定文件夹并整理

下面是在C#中将文件复制(剪切是先复制再删除)到指定的路径,并按日期归档的一个简单实例。值得注意的2点是:

1)文件的路径是关键,程序中使用双斜杠\\

2)文件和文件夹的区别

private void DoWork()
{
   String dir="D:\\ABC"
   //创建备份文件夹,按时间命名
   String bakDir = dir + "\\bak\\" + DateTime.Now.ToString("yyyy-MM-dd");

   if (Directory.Exists(bakDir) == false){
       Directory.CreateDirectory(bakDir);
   }
   string[] files = Directory.GetFiles(dir);
   if (files.Length != 0) {
      foreach (string file in files) {
      FileInfo fileinfo = new FileInfo(file);
      try{
        string fileName = file.Replace(dir, "");
        //备份文件
        File.Copy(file,Path.Combine(bakDir,fileName));
        File.Delete(file);
      }
   }
}

附上其他网友的实现方法:

private void CopyDir(string srcPath, string aimPath)
 {

 try

 {

 // 检查目标目录是否以目录分割字符结束如果不是则添加

 if (aimPath[aimPath.Length - 1] != System.IO.Path.DirectorySeparatorChar)

 {

 aimPath += System.IO.Path.DirectorySeparatorChar;

 }

 // 判断目标目录是否存在如果不存在则新建

 if (!System.IO.Directory.Exists(aimPath))
 {

 System.IO.Directory.CreateDirectory(aimPath);

 }

 // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组

 // 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法

 // string[] fileList = Directory.GetFiles(srcPath);

 string[] fileList = System.IO.Directory.GetFileSystemEntries(srcPath);

 // 遍历所有的文件和目录

 foreach (string file in fileList)

 {

 // 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

 if(System.IO.Directory.Exists(file))

 {

 CopyDir(file, aimPath + System.IO.Path.GetFileName(file));

 }

 // 否则直接Copy文件

 else

 {

 System.IO.File.Copy(file, aimPath + System.IO.Path.GetFileName(file),true);

 }

 }

 }

 catch(Exception e)
 {

 throw;

 }

 }
  }

完全可以不用递归实现,用广度优先算法可以节省栈空间

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
string sourcepath=@"C:\sourcedir";
Queue<FileSystemInfo> copyfolders = new Queue<FileSystemInfo>(new DirectoryInfo(sourcepath).GetFileSystemInfos());
string copytopath = @"C:\targetdir";
copytopath = (copytopath.LastIndexOf(Path.DirectorySeparatorChar) == copytopath.Length - 1) ? copytopath : (copytopath+Path.DirectorySeparatorChar) + Path.GetFileName(sourcepath);
Directory.CreateDirectory(copytopath);
while (copyfolders.Count>0)
{
  FileSystemInfo atom = opyfolders.Dequeue();
  FileInfo file = atom as FileInfo;
  if (file == null)
  {
    DirectoryInfo directory = atom as DirectoryInfo;
    Directory.CreateDirectory(directory.FullName.Replace(sourcepath,copytopath));
    foreach (FileSystemInfo fi in directory.GetFileSystemInfos())
      copyfolders.Enqueue(fi);
  }
  else
    file.CopyTo(file.FullName.Replace(sourcepath,copytopath));
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • c#递归遍历文件夹示例

    代码很简单,指定需要递归遍历的文件夹和遍历规则就要可以运行了 复制代码 代码如下: /// <summary>/// 递归获取文件夹目录下文件/// </summary>/// <param name="pathName">需要递归遍历的文件夹</param>/// <param name="fileRule">遍历规则『委托』</param>public static void LoopFol

  • C#获取文件夹及文件的大小与占用空间的方法

    本文详细介绍了利用C#实现根据路径,计算这个路径所占用的磁盘空间的方法 . 网上有很多资料都是获取文件夹/文件的大小的.对于占用空间的很少有完整的代码.这里介绍实现这一功能的完整代码,供大家参考一下. 首先说下文件夹/文件大小与占用空间的区别. 这个是硬盘分区格式有关 大小是文件的实际大小,而占用空间是占硬盘的实际空间 以FAT32格式为例,硬盘的基本存储单位是簇,在FAT32中一簇是4KB 那么,也就是说即使文件只有1个字节,在硬盘上也要占到4KB的空间 如果文件是4KB零1个字节,那就要占用

  • C#实现获取文件夹大小的方法

    本文实例讲述了C#实现获取文件夹大小的方法.分享给大家供大家参考.具体如下: 当然了,首先都需要引入System.IO这个命名空间 第一个方法: public static long GetDirectoryLength(string dirPath) { //判断给定的路径是否存在,如果不存在则退出 if (!Directory.Exists(dirPath)) return 0; long len = 0; //定义一个DirectoryInfo对象 DirectoryInfo di = n

  • c# 删除所有的空文件夹的小例子

    复制代码 代码如下: /// <summary>        /// 删除掉空文件夹        /// 所有没有子"文件系统"的都将被删除        /// </summary>        /// <param name="storagepath"></param>        public static void KillEmptyDirectory(String storagepath)      

  • C#搜索文字在文件及文件夹中出现位置的方法

    本文实例讲述了C#搜索文字在文件及文件夹中出现位置的方法.分享给大家供大家参考.具体如下: 在linux中查询文字在文件中出现的位置,或者在一个文件夹中出现的位置,用命令: 复制代码 代码如下: grep -n '需要查询的文字' * 就可以了.今天做了一个C#程序,专门用来找出一个指定字符串在文件中的位置,与一个指定字符串在一个文件夹中所有的出现位置. 一.程序代码 using System; using System.Collections.Generic; using System.Lin

  • 将文件夹下所有文件输出到日志文件中 c#递归算法学习示例

    算法文章,总是带给我们无穷的思考和兴趣,一个问题,多种解决方法,看你如何去思考它,对于标题所引出的问题,我觉得,使用递归是比较有效的方法,当然递归还有很多使用场合,如树型分类列表的操作等等. 注意: 使用递归时,初学者要特别注意的就是"出口",必须为递归提供一个出口,否则你的内存就要溢出了,呵呵,memory overflow大家肯定都见过,都是从那时候过来的,呵呵. 代码中的递归: 复制代码 代码如下: static void GetFiles(List<string>

  • C#简单遍历指定文件夹中所有文件的方法

    本文实例讲述了C#简单遍历指定文件夹中所有文件的方法.分享给大家供大家参考,具体如下: C#遍历指定文件夹中的所有文件: DirectoryInfo TheFolder=new DirectoryInfo(folderFullName); //遍历文件夹 foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories()) this.listBox1.Items.Add(NextFolder.Name); //遍历文件 foreach(F

  • C#编程实现统计文件夹内文件和隐藏文件的方法示例

    本文实例讲述了C#编程实现统计文件夹内文件和隐藏文件的方法.分享给大家供大家参考,具体如下: C#统计文件夹内的文件,包括隐藏文件,显示那个隐藏文件...隐藏的..为什么别人要隐藏呢.. 将程序放在任何文件夹内,点击"当前文件夹",可以获取文件夹所在的路径,也可以直接输入路径,再点击"显示文件",就可以看到效果了,下面的状态栏实现统计功能 using System; using System.Collections.Generic; using System.Co

  • C#显示文件夹下所有图片文件的方法

    本文实例讲述了C#显示文件夹下所有图片文件的方法.分享给大家供大家参考.具体实现方法如下: <%@ Page Language="C#" EnableViewState="false" %> <%@ Import Namespace="System.IO" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

  • C# 对文件与文件夹的操作包括删除、移动与复制

    在.Net中,对文件(File)和文件夹(Folder)的操作可以使用File类和Directory类,也可以使用FileInfo类和DirectoryInfo类.文件夹(Folder)是只在Windows操作系统中使用的名词.在操作系统的理论中,人们更习惯于使用目录(Directory)这个名词.或许微软为了有朝一日将.Net移植到其他的操作系统中(实际上也有很多人也在做着这个项目),所以还是以Directory来命名操作文件夹的类. File类和Directory类都是静态类.使用它们的好处

  • C#递归实现显示文件夹及所有文件并计算其大小的方法

    算法中递归的一个典型应用就是遍历目标文件夹,并把该文件夹下的所有文件和文件夹打印或显示出来,还可以递归计算出目标文件夹的总大小.本文即以实例形式展示了C#递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小的方法. 具体实现代码如下: class Program { static void Main(string[] args) { Console.WriteLine("输入目标文件夹"); string path = Console.ReadLine(); FindFol

  • C#监控文件夹变化的方法

    本文实例讲述了C#监控文件夹变化的方法.分享给大家供大家参考.具体实现方法如下: 当需要监控某一文件,FileSystemWatcher类提供了Created, Deleted,Rename等事件. 就拿FileSystemWatcher的Created事件来说,该事件类型是FileSystemEventHandler. 复制代码 代码如下: public delgate void FileSystemEventHandler(Object sender, FileSystemEventArgs

随机推荐