gpt4 book ai didi

c# - 压缩目录并上传到 FTP 服务器,而无需在 C# 中本地保存 .zip 文件

转载 作者:行者123 更新时间:2023-11-30 15:56:29 25 4
gpt4 key购买 nike

我的问题是标题。我试过这个:

public void UploadToFtp(List<strucProduktdaten> ProductData)
{
ProductData.ForEach(delegate( strucProduktdaten data )
{
ZipFile.CreateFromDirectory(data.Quellpfad, data.Zielpfad, CompressionLevel.Fastest, true);
});
}


static void Main(string[] args)
{
List<strucProduktdaten> ProductDataList = new List<strucProduktdaten>();
strucProduktdaten ProduktData = new strucProduktdaten();
ProduktData.Quellpfad = @"Path\to\zip";
ProduktData.Zielpfad = @"Link to the ftp"; // <- i know the link makes no sense without a connect to the ftp with uname and password

ProductDataList.Add(ProduktData);

ftpClient.UploadToFtp(ProductDataList);
}

错误:

System.NotSupportedException:"The Path format is not supported."

我不知道在这种情况下我应该如何连接到 FTP 服务器并将目录压缩到 ram 中并将其直接发送到服务器。

...有人可以提供帮助或链接到已解决的类似或同等问题吗?

最佳答案

MemoryStream 中创建 ZIP 存档并上传。

using (Stream memoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (string path in Directory.EnumerateFiles(@"C:\source\directory"))
{
ZipArchiveEntry entry = archive.CreateEntry(Path.GetFileName(path));

using (Stream entryStream = entry.Open())
using (Stream fileStream = File.OpenRead(path))
{
fileStream.CopyTo(entryStream);
}
}
}

memoryStream.Seek(0, SeekOrigin.Begin);

var request =
WebRequest.Create("ftp://ftp.example.com/remote/path/archive.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream ftpStream = request.GetRequestStream())
{
memoryStream.CopyTo(ftpStream);
}
}

不幸的是,ZipArchive 需要一个可搜索的流。否则,您将能够直接写入 FTP 请求流,而无需将整个 ZIP 文件保存在内存中。


基于:

关于c# - 压缩目录并上传到 FTP 服务器,而无需在 C# 中本地保存 .zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com