cómo comprimir y descomprimir un archivo de texto

Estoy teniendo dos problemas

Mis problemas son

  1. Mi nombre de archivo es 20110505.txt, y está comprimiendo un nombre de archivo zip como -> 20110505.txt.zip Pero necesito después de comprimir este archivo 20110505.txt como -> 20110505.zip solamente.

Estoy usando este dll

utilizando System.IO.Compression;

Aquí está mi código para comprimir,

1) es mi formato de texto

string path = DayDestination + "\\" + txtSelectedDate.Text + ".txt"; StreamWriter Strwriter = new StreamWriter(path); DirectoryInfo di = new DirectoryInfo(path); FileInfo fi = new FileInfo(path); Compress(fi); public static void Compress(FileInfo fi) { // Get the stream of the source file. using (FileStream inFile = fi.OpenRead()) { // Prevent compressing hidden and already compressed files. if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fi.Name != ".zip") { // Create the compressed file. using (FileStream outFile = File.Create(fi.FullName + ".zip")) //using (FileStream outFile = File.Create( fi.Name+ ".zip")) { using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress)) { // Copy the source file into the compression stream. byte[] buffer = new byte[4096]; int numRead; while ((numRead = inFile.Read(buffer, 0, buffer.Length)) != 0) { Compress.Write(buffer, 0, numRead); } Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fi.Name, fi.Length.ToString(), outFile.Length.ToString()); } } } } } 
  1. Si mi nombre de archivo zip es 20110505.zip después de descomprimir, quiero que mi nombre de archivo sea 20110505.txt. después de descomprimir el archivo zip en el archivo de texto, quiero eliminar el archivo zip después de comprimir

      string Path2 = (string)(Application.StartupPath + "\\TEMP\\" + "\\" + name_atoz); DirectoryInfo di = new DirectoryInfo(Path2); FileInfo fi = new FileInfo(Path2); Compress(fi); public static void Decompress(FileInfo fi) { // Get the stream of the source file. using (FileStream inFile = fi.OpenRead()) { // Get original file extension, for example "doc" from report.doc.gz. string curFile = fi.FullName; string origName = curFile.Remove(curFile.Length - fi.Extension.Length); //Create the decompressed file. using (FileStream outFile = File.Create(origName)) { using (GZipStream Decompress = new GZipStream(inFile, CompressionMode.Decompress)) { //Copy the decompression stream into the output file. byte[] buffer = new byte[4096]; int numRead; while ((numRead = Decompress.Read(buffer, 0, buffer.Length)) != 0) { outFile.Write(buffer, 0, numRead); } Console.WriteLine("Decompressed: {0}", fi.Name); } } } } 

Quiero esto porque estoy creando un proyecto que lee el archivo de texto.

¿Hay alguna sugerencia para mi problema?

Gracias por adelantado

Como Mitch señaló en los comentarios anteriores, el problema parece ser que su nombre de archivo se usa para el archivo zip. Incluyes el FullName, pero eso tiene el .txt al final. Quítatelo y deberías tener lo que quieres.

La línea de la que estoy hablando es esta:

 using (FileStream outFile = File.Create(fi.FullName + ".zip")) 

Una forma sencilla de solucionarlo sería la siguiente:

 using (FileStream outFile = File.Create(System.Text.RegularExpressions.Regex.Replace(fi.FullName, ".txt$", "") + ".zip")) 

Para eliminar su archivo zip después de descomprimirlo, coloque la siguiente línea en su método de Decompress como la última línea (fuera de su statement más externa):

 File.Delete(fi); 

Probablemente quieras envolver eso en un try-catch pero este es el código básico para ejecutar. Aquí hay un artículo sobre cómo eliminar un archivo de forma segura:

http://www.dotnetperls.com/file-delete