Похоже, у вас сложилось впечатление, что файл будет добавлен в архив, что не соответствует действительности.CreateEntry
просто создает запись с указанным путем и именем записи, вам все равно нужно написать фактический файл.
На самом деле, код в вашем вопросе очень похож на код в документацииИтак, я предполагаю, что вы получили его оттуда?
В любом случае, чтобы получить только имя файла, вы можете использовать Path.GetFileName
, а затем вы можете записать фактическое содержимое файла в zip-запись.
var filePath = @"C:\temp\foo.txt";
var zipName = @"C:\temp\foo.zip";
using (FileStream zipToOpen = new FileStream(zipName, FileMode.CreateNew))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry(Path.GetFileName(filePath));
using (StreamReader reader = new StreamReader(filePath))
using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
{
writer.Write(reader.ReadToEnd());
}
}
}
Приведенный выше код создаст архив с foo.txt
в корне и содержимым исходного файла без каких-либо дополнительных каталогов.