這是我的問題,我試圖讓我的世界經典服務器,我使用文本系統,使每個地圖允許列表,問題是文本系統使文件每個地圖和我們總共獲得了15k個地圖,所以如果1k玩家將允許列表添加到他們的地圖中,則很難將服務器上傳/移動到其他主機。我想在我的軟件的主文件夾中創建一個zip文件,並將其添加到每個文本文件中,並使其可以與系統讀取,我想知道如何從GZip讀取文件,以及如何壓縮文件。C# - 如何從GZip讀取文本文件
謝謝
這是我的問題,我試圖讓我的世界經典服務器,我使用文本系統,使每個地圖允許列表,問題是文本系統使文件每個地圖和我們總共獲得了15k個地圖,所以如果1k玩家將允許列表添加到他們的地圖中,則很難將服務器上傳/移動到其他主機。我想在我的軟件的主文件夾中創建一個zip文件,並將其添加到每個文本文件中,並使其可以與系統讀取,我想知道如何從GZip讀取文件,以及如何壓縮文件。C# - 如何從GZip讀取文本文件
謝謝
有關如何使用GZip進行壓縮和解壓縮的詳細信息。解壓縮後,您可以使用StreamReader() class來讀取文件(.NET 4.0)的內容。
using System;
using System.IO;
using System.IO.Compression;
namespace zip
{
public class Program
{
public static void Main()
{
string directoryPath = @"c:\users\public\reports";
DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
{
Compress(fileToCompress);
}
foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
{
Decompress(fileToDecompress);
}
}
public static void Compress(FileInfo fileToCompress)
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
originalFileStream.CopyTo(compressionStream);
Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString());
}
}
}
}
}
public static void Decompress(FileInfo fileToDecompress)
{
using (FileStream originalFileStream = fileToDecompress.OpenRead())
{
string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))
{
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
}
}
}
}
}
}
以下是我的新問題:http://puu.sh/2uehO – 111WARLOCK111 2013-04-05 09:41:17
@ user2248354您使用的是什麼版本的.NET? – Dave 2013-04-05 10:02:07
Microsoft Visual Studio 2010 Professional – 111WARLOCK111 2013-04-05 10:27:43
如果你想避免創建臨時文件,您可以使用此:
using (Stream fileStream = File.OpenRead(filePath),
zippedStream = new GZipStream(fileStream, CompressionMode.Decompress))
{
using (StreamReader reader = new StreamReader(zippedStream))
{
// work with reader
}
}
這是我很容易的工作代碼。沒有臨時文件
using (FileStream reader = File.OpenRead(filePath))
using (GZipStream zip = new GZipStream(reader, CompressionMode.Decompress, true))
using (StreamReader unzip = new StreamReader(zip))
while(!unzip.EndOfStream)
ReadLine(unzip.ReadLine());
相當優雅,如果我不這麼說+1 – ppumkin 2017-09-27 19:30:43
這個C#代碼是如何與這個問題相關的?請僅留下相關代碼並通過僅引用實際代碼來制定您的問題 – sll 2013-04-05 09:24:51