我想使用C#.Net将一个“CSV”文件压缩到Zip文件中。下面我已经为创建Zip文件编写了一些代码,使用此代码我能够创建zip文件但是在创建“Data1.zip”文件后手动提取意味着提取的文件扩展名应为“.csv”但它不会出现。
FileStream sourceFile = File.OpenRead(@"C:\Users\Rav\Desktop\rData1.csv");
FileStream destFile = File.Create(@"C:\Users\Rav\Desktop\Data1.zip");
GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress,false);
try
{
int theByte = sourceFile.ReadByte();
while (theByte != -1)
{
compStream.WriteByte((byte)theByte);
theByte = sourceFile.ReadByte();
}
}
finally
{
compStream.Dispose();
}
答案 0 :(得分:4)
http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
这是gzip压缩,显然它只压缩一个流,解压缩时会使用没有.gz
扩展名的存档名称。我不知道我是不是在这里。您也可以尝试使用MSDN中的代码,看看它是否有效。
我使用ZipLib进行zip压缩。它还支持Bz2,这是一种很好的压缩算法。
答案 1 :(得分:2)
使用以下其中一个库: http://www.icsharpcode.net/opensource/sharpziplib/ http://dotnetzip.codeplex.com/
我更喜欢#ziplib,但两者都有很好的文档记录和广泛传播。
答案 2 :(得分:2)
使用ICSharpCode.SharpZipLib(您可以下载)并执行以下操作
private void CreateZipFile(string l_sFolderToZip)
{
FastZip z = new FastZip();
z.CreateEmptyDirectories = true;
z.CreateZip(l_sFolderToZip + ".zip", l_sFolderToZip, true, "");
if (Directory.Exists(l_sFolderToZip))
Directory.Delete(l_sFolderToZip, true);
}
private void ExtractFromZip(string l_sFolderToExtract)
{
string l_sZipPath ="ur folder path" + ".zip";
string l_sDestPath = "ur location" + l_sFolderToExtract;
FastZip z = new FastZip();
z.CreateEmptyDirectories = true;
z.ExtractZip(l_sZipPath, l_sDestPath, "");
if (File.Exists(l_sZipPath))
File.Delete(l_sZipPath);
}
希望它有所帮助...
答案 3 :(得分:1)
从.NET Framework 4.5开始,您可以使用内置的ZipFile类(在System.IO.Compression命名空间中)。
public void ZipFiles(string[] filePaths, string zipFilePath)
{
ZipArchive zipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create);
foreach (string file in filePaths)
{
zipArchive.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal);
}
zipArchive.Dispose();
}
答案 4 :(得分:1)
在这里查看FileSelectionManager库:www.fileselectionmanager.com
首先,您必须将文件选择管理器DLL添加到项目中
以下是压缩的示例:
class Program
{
static void Main(string[] args)
{
String directory = @"C:\images";
String destinationDiretory = @"c:\zip_files";
String zipFileName = "container.zip";
Boolean recursive = true;
Boolean overWrite = true;
String condition = "Name Contains \"uni\"";
FSM FSManager = new FSM();
/* creates zipped file containing selected files */
FSManager.Zip(directory,recursive,condition,destinationDirectory,zipFileName,overWrite);
Console.WriteLine("Involved Files: {0} - Affected Files: {1} ",
FSManager.InvolvedFiles,
FSManager.AffectedFiles);
foreach(FileInfo file in FSManager.SelectedFiles)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4} Bytes",
file.DirectoryName,
file.Name,
file.Extension,
file.CreationTime,
file.Length);
}
}
}
以下是解压缩的示例:
class Program
{
static void Main(string[] args)
{
String destinationDiretory = @"c:\zip_files";
String zipFileName = "container.zip";
Boolean unZipWithDirectoryStructure = true;
FSM FSManager = new FSM();
/* Unzips files with or without their directory structure */
FSManager.Unzip(zipFileName,
destinationDirectory,
unZipWithDirectoryStructure);
}
}
希望它有所帮助。
答案 5 :(得分:0)
我使用dll fileselectionmanager压缩和解压缩文件和文件夹,它在我的项目中正常工作。您可以在网络中查看示例http://www.fileselectionmanager.com/#Zipping and Unzipping files 和文件http://www.fileselectionmanager.com/file_selection_manager_documentation