像本机一样以编程方式压缩文件发送到压缩的 zip 文件夹
zip a file programatically like native send to compressed zip folder
我必须将压缩文件发送到外部应用程序。另一端的支持说应用程序无法读取我以编程方式创建的文件。这就是我创建文件的方式:
using System.IO;
using System.IO.Compression;
const string ZIPPATH = @".\stock.zip";
const string PACKAGEPATH = @".\stock\content";
const string APPPACKAGE = @".\stock";
const string PACKAGEFILENAME = @"content\Offers.xml";
private void CreateZipArchive()
{
if (!Directory.Exists(PACKAGEPATH)) Directory.CreateDirectory(PACKAGEPATH);
if (File.Exists(ZIPPATH)) File.Delete(ZIPPATH);
ZipFile.CreateFromDirectory(APPPACKAGE, ZIPPATH);
using (FileStream fs = new FileStream(ZIPPATH, FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
{
ZipArchiveEntry zae = archive.CreateEntry(PACKAGEFILENAME);
using (StreamWriter sw = new StreamWriter(zae.Open(), new UTF8Encoding(true)))
{
// xml writing code ...
sw.Write("--snipped--");
}
}
}
文件夹 APPPACKAGE 包含一些必需的文件。创建 zip 后,我插入我创建的 xml 文件。检查创建的 zip 文件的内容 看起来 一切正常,但收件人应用程序无法读取它。我的问题是:有什么我可能遗漏的吗?
编辑: 客户几乎没有给我额外的反馈。唯一提到的是,如果存在 md5 错误,则可能会发生无法读取包的情况。我现在怀疑它可能与我创建包的顺序有关。我将尝试先创建 xml 文件,然后再创建 zip 文件
尽管 LukaszSzczygielek 指出 another possible Issue in zip file creation 我的特定问题的解决方案是先创建文件然后创建包:
using System.IO;
using System.IO.Compression;
const string ZIPPATH = @".\stock.zip";
const string PACKAGEPATH = @".\stock\content";
const string APPPACKAGE = @".\stock";
const string PACKAGEFILENAME = @"\Offers.xml";
private void CreateZipArchive()
{
if (!Directory.Exists(PACKAGEPATH)) Directory.CreateDirectory(PACKAGEPATH);
if (File.Exists(ZIPPATH)) File.Delete(ZIPPATH);
string fileFullPath = PACKAGEPATH + PACKAGEFILENAME;
using(Stream fs = new FileStream(fileFullPath, FileMode.Create, FileAccess.Write))
using(StreamWriter sw = new StreamWriter(fs, new UTF8Encoding(true)))
{
// xml writing code ...
sw.Write("--snipped--");
}
ZipFile.CreateFromDirectory(APPPACKAGE, ZIPPATH);
}
我必须将压缩文件发送到外部应用程序。另一端的支持说应用程序无法读取我以编程方式创建的文件。这就是我创建文件的方式:
using System.IO;
using System.IO.Compression;
const string ZIPPATH = @".\stock.zip";
const string PACKAGEPATH = @".\stock\content";
const string APPPACKAGE = @".\stock";
const string PACKAGEFILENAME = @"content\Offers.xml";
private void CreateZipArchive()
{
if (!Directory.Exists(PACKAGEPATH)) Directory.CreateDirectory(PACKAGEPATH);
if (File.Exists(ZIPPATH)) File.Delete(ZIPPATH);
ZipFile.CreateFromDirectory(APPPACKAGE, ZIPPATH);
using (FileStream fs = new FileStream(ZIPPATH, FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
{
ZipArchiveEntry zae = archive.CreateEntry(PACKAGEFILENAME);
using (StreamWriter sw = new StreamWriter(zae.Open(), new UTF8Encoding(true)))
{
// xml writing code ...
sw.Write("--snipped--");
}
}
}
文件夹 APPPACKAGE 包含一些必需的文件。创建 zip 后,我插入我创建的 xml 文件。检查创建的 zip 文件的内容 看起来 一切正常,但收件人应用程序无法读取它。我的问题是:有什么我可能遗漏的吗?
编辑: 客户几乎没有给我额外的反馈。唯一提到的是,如果存在 md5 错误,则可能会发生无法读取包的情况。我现在怀疑它可能与我创建包的顺序有关。我将尝试先创建 xml 文件,然后再创建 zip 文件
尽管 LukaszSzczygielek 指出 another possible Issue in zip file creation 我的特定问题的解决方案是先创建文件然后创建包:
using System.IO;
using System.IO.Compression;
const string ZIPPATH = @".\stock.zip";
const string PACKAGEPATH = @".\stock\content";
const string APPPACKAGE = @".\stock";
const string PACKAGEFILENAME = @"\Offers.xml";
private void CreateZipArchive()
{
if (!Directory.Exists(PACKAGEPATH)) Directory.CreateDirectory(PACKAGEPATH);
if (File.Exists(ZIPPATH)) File.Delete(ZIPPATH);
string fileFullPath = PACKAGEPATH + PACKAGEFILENAME;
using(Stream fs = new FileStream(fileFullPath, FileMode.Create, FileAccess.Write))
using(StreamWriter sw = new StreamWriter(fs, new UTF8Encoding(true)))
{
// xml writing code ...
sw.Write("--snipped--");
}
ZipFile.CreateFromDirectory(APPPACKAGE, ZIPPATH);
}