在C#中创建备份实用程序

时间:2010-08-25 16:46:40

标签: c# utility

我正在考虑将备份实用程序作为我的下一个项目构想,但我真的不知道从哪里开始或应该如何进行备份。

任何人都可以了解归档备份和恢复等方法。

由于

5 个答案:

答案 0 :(得分:4)

首先,我不相信我在.NET Framework中看到过专门为备份/归档/恢复活动设计的任何命名空间或类。如果有人知道,请赐教我们!

最简单的说,备份文件只是将文件从一个位置复制到另一个位置。假设您有源代码,您希望保留备份,并且它会逐日改变。您可以创建一个小型控制台应用程序,只需将目标文件夹中的所有文件复制到外部驱动器,覆盖自上次复制操作以来已更改的所有文件,并将任何新文件和文件夹添加到目标。然后使用计划任务在计算机未被使用的情况下每天运行一次该实用程序 - 或者至少在未编辑源的情况下运行该实用程序。

System.IO命名空间中有许多方法和类,这使得这相对容易。

IO命名空间中的一些有用的类是:

  • Directory提供了用于创建,移动和枚举目录和子目录的静态方法
  • DirectoryInfo是一个公开文件夹/目录属性的类
  • 文件提供文件的静态方法
  • FileInfo是一个暴露文件属性的类。

这是一个代码示例,它将为您提供C:驱动器根目录下所有顶级文件夹的数组:

string[] d = Directory.GetDirectories(@"C\", "*.*", SearchOption.TopDirectoryOnly);
DirectoryInfo[] di = new DirectoryInfo[d.Length];
for (int x = 0; x < d.Length; x++)
{
    di[x] = new DirectoryInfo(d[x]);
}

答案 1 :(得分:2)

更简单的方法之一是:

  1. 允许用户选择目标文件夹和目的地,以及目的地类型(Zip,copy等)
  2. 将目标文件夹中的文件和子文件夹复制/压缩到目标
  3. 如果您只想复制文件,那么您可以使用DirectoryInfo和FilesInfo来获取目录,文件,并执行FileCopy,FileMove等...

    如果你想在目的地压缩文件,那么你可以使用现有的库,比如7z,它也有C#代码。

答案 2 :(得分:2)

AlphaVSS将完整的VSS(卷影复制服务)API公开给.NET代码。这可以允许您使用托管代码创建时间点的快照。

答案 3 :(得分:1)

  • 您是计划逐个扇区备份还是逐个文件?
  • 您的备份是以管理员(访问所有文件)还是以用户身份运行(仅访问某些文件)?
  • 如何保护现在存储在备份文件中的管理员级信息免受用户级查看器的影响?
  • 您的目标媒体必须有足够的空间用于备份(大型网络驱动器),还是备份能够跨越多个媒体? (CDROM的)
  • 在后一种情况下,您将如何处理比单个目标媒体更大的单个文件?
  • 您是否总是进行完整备份(一切,总是)或增量(自上次备份以来的更改)或差异(自上次完整备份以来发生了哪些变化)?

答案 4 :(得分:1)

通读此Wikipedia Article - Backup并确保您了解其中的所有内容。

最简单的备份实用程序是允许用户选择源文件夹和目标文件夹,然后将其复制。 (因为这基本上都是备份)。

但是你需要一些递归文件夹调用来备份文件夹中的每个文件夹。