嘿,我在我的RAM中用C#压缩文件并将它们上传到Ftp-Server时有一点问题。这个工作非常好。
destinyPath =“product / test / zipped.zip”; sourcePath = @“C:\ devtest ...”
private String UploadToFtp(String destinyPath, String sourcePath, ref FtpClient client)
{
String error = "success";
try
{
// Stream im Arbeitsspeicher erstellen
using (Stream memoryStream = new MemoryStream())
// Ziparchive anhand des verweißes auf den memoryStream erstellen
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
// Dateien im gezippten Ordner bestimmen
foreach (string path in Directory.EnumerateFiles(sourcePath))
{
ZipArchiveEntry entry;
if (path.Length > 248)
{
// Bestimmte Dateien ins Ziparchive erstellen mit langen Pfad
entry = archive.CreateEntry(ZlpPathHelper.GetFileNameFromFilePath(path));
}
else
{
// Bestimmte Dateien ins Ziparchive erstellen mit kurzem Pfad
entry = archive.CreateEntry(Delimon.Win32.IO.Path.GetFileName(path));
}
// Original Daten (entryStream) in Ziparchivedateien (fileStream) schreiben
using (Stream entryStream = entry.Open())
using (Stream fileStream = Delimon.Win32.IO.File.OpenRead(path))
{
fileStream.CopyTo(entryStream);
}
}
//memoryStream curser auf anfang setzen
memoryStream.Seek(0, SeekOrigin.Begin);
//Stream auf den FtpServer laden
client.RetryAttempts = 3;
client.Upload(memoryStream, destinyPath);
}
}
catch (Exception ex)
{
error = ex.ToString();
}
return error;
}
但现在我的问题。如果我在下载后尝试使用doubleclick打开它们,我总是从Windows获得相同的摘要:“无法打开目录.Zip目录'C:*'无效。”但是,如果我右键单击7-zip-> open-> *,7-zip-> open->#或7-zip-> open->#:e它可以工作。
属性:打开方式是Windows-Explorer。
是的,我试图一次又一次地下载.zip。我用Google搜索,发现类似“无法找到Fileending”,但没有解决方法。
答案 0 :(得分:-1)
我发现了我的错误。它与ZlpPathHelper或Delimon程序集无关。
现在这是Code巫婆的工作。我把使用“} {”放到错误的地方。 Ftp上传不应该在archive-Stream的使用块中。
导致在完全创建存档之前上载.zip存档的结果。 =>所有文件都在存档中,但如果我尝试打开它,则会出错。
private String UploadToFtp(String destinyPath, String sourcePath, ref FtpClient client)
{
String error = "success";
try
{
// Stream im Arbeitsspeicher erstellen
using (Stream memoryStream = new MemoryStream())
{
// Ziparchive anhand des verweißes auf den memoryStream erstellen
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
// Dateien im gezippten Ordner bestimmen
foreach (string path in Directory.EnumerateFiles(sourcePath))
{
ZipArchiveEntry entry;
if (path.Length > 248)
{
// Bestimmte Dateien ins Ziparchive erstellen mit langen Pfad
entry = archive.CreateEntry(ZlpPathHelper.GetFileNameFromFilePath(path));
}
else
{
// Bestimmte Dateien ins Ziparchive erstellen mit kurzem Pfad
entry = archive.CreateEntry(Path.GetFileName(path));
}
// Original Daten (entryStream) in Ziparchivedateien (fileStream) schreiben
using (Stream entryStream = entry.Open())
{
using (Stream fileStream = Delimon.Win32.IO.File.OpenRead(path))
{
fileStream.CopyTo(entryStream);
}
}
}
}
//memoryStream curser auf anfang setzen
memoryStream.Seek(0, SeekOrigin.Begin);
//Stream auf den FtpServer laden
client.RetryAttempts = 3;
client.Upload(memoryStream, destinyPath);
}
}
catch (Exception ex)
{
error = ex.ToString();
}
return error;
}