7

これが私の問題です。私はMinecraftのクラシックサーバーを作ろうとしていて、テキストシステムを使用して各マップの許可リストを作成しています.問題は、テキストシステムが各マップのファイルを作成し、合計で約15,000のマップがあるため、 1,000 人のプレイヤーがマップに許可リストを追加すると、サーバーを別のホストにアップロード/移動するのが難しくなります。ソフトウェアのメイン フォルダに zip ファイルを作成し、それに各テキスト ファイルを追加して、システムで読み取り可能にしたいのですが、GZip からファイルを読み取る方法と、ファイルを圧縮する方法も知りたいです。

ありがとう

4

3 に答える 3

13

これが私の非常に簡単な作業コードです。一時ファイルなし

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());
于 2015-03-31T15:42:42.933 に答える
3

GZip を使用して圧縮および解凍する方法の詳細。解凍後、StreamReader() クラスを使用してファイルの内容を読み取ることができます (.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);
                    }
                }
            }
        }
    }
}

ソース

于 2013-04-05T09:27:16.060 に答える