需要在网络上传输超过3G的小文件

本文关键字:3G 小文 文件 传输 网络 | 更新日期: 2023-09-27 18:35:27

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

在 c# 中是否有办法仅在一个文件中传输我的目录,以便使用第三方,如 winrar、winzip、7zip ....

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

Rigth现在我使用自定义方法来做到这一点,导致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);
          }
        }
      }
    }

需要在网络上传输超过3G的小文件

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

每个文件在从中获取文件的文件系统和接收文件的文件系统上都有很大的开销。除了创建文件系统(可以设置适当的块和集群大小时),您根本无法对此开销执行任何操作。

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

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