-1

我需要在网络上传输很多小文件。我的文件总大小约为 3G,未来还会增长。我知道如果我将文件传输到一个文件中,如(winrar 文件、winzip 文件或 7 zipfile),网络上的性能会更好,但我会在 cpu 时间后支付压缩和解压缩文件的费用。

有没有办法在 c# 中将我的目录转移到一个文件中,而无需使用第三方,如 winrar、winzip、7zip ....

以最佳性能传输我的文件夹、子文件夹和文件的最佳方式是什么?

现在我使用自定义方法来做这件事导致Directory.Move给我一些问题

有我的实际方法,我知道它可能不是性能最好的方法。有什么建议吗?

问题是 :

如何在 c# 的网络共享上以更好的性能传输我的所有目录和文件,包括压缩和解压缩(如果我需要)?

private void CopyDirectory(string source, string destination)
    {
      string[] files;


      if (!Directory.Exists(destination)) DirectoryHelper.CreateDirectoriesFromPath(destination);

      files = Directory.GetFileSystemEntries(source);

      foreach (string fileElement in files)
      {
        if (Directory.Exists(fileElement))
        {
          if (!ExcludedDirectoryName.Contains(Path.GetFileNameWithoutExtension(fileElement)))
          {
            CopyDirectory(fileElement, Path.Combine(destination, Path.GetFileName(fileElement)));
          }
        }
        else
        {
          try
          {
            // Valide si le fichier fait partie de la liste d'exclusion
            if (!ExcludedDirectoryName.Contains(Path.GetFileNameWithoutExtension(fileElement)))
            {
              // Calcule le Path de destination
              string destinationFile = Path.Combine(destination, Path.GetFileName(fileElement));

              // Valide si le fichier existe
              if (FileHelper.Exist(destinationFile))
              {
                // Supprime le fichier
                File.Delete(destinationFile);
              }

              // Copie le nouveau fichier
              File.Copy(fileElement, destinationFile, true);
            }
          }
          catch (IOException ioEx)
          {


            // Log l'exception
            ExceptionLogger.Publish(ioEx);
          }
        }
      }
    }
4

1 回答 1

0

与逐个文件传输相比,像 zip 这样的存档格式有很多优势,尤其是在您处理数以万计的小文件时。一方面,zip 已完全调试。您不必担心像空文件或目录这样的边缘情况。另一方面,通过网络传输一些大文件比传输大量小文件所需的开销要少得多。

在您从中获取文件的文件系统和接收它们的文件系统上,每个文件都有很多开销。除了创建文件系统(当您可以设置适当的块和集群大小时)外,您对这种开销无能为力。

在程序中使用像 DotNetZip 这样的归档包可能会有所帮助。您将能够在程序的控制下编写然后读取 zip 文件。一探究竟。 http://www.codeproject.com/Articles/181291/DotNetZip。Sharpziplib 也是一种可能。

但是,您可能想考虑使用 rsync 之类的工具。这是专为您正在做的事情而构建的,并且已经过完全调试。 http://en.wikipedia.org/wiki/Rsync

于 2012-05-25T19:30:00.793 回答