1

基本的には、Gzip ファイルをリッチ テキスト ボックスにロードするだけです。ファイルを解凍するためのコードが MS .NET サイトで見つかりました。そのストリームをリッチ テキスト ボックスに向けたいのですが、「非静的フィールド、メソッド、またはプロパティ 'WindowsFormsApplication1.Form1.richTextBox1' にはオブジェクト参照が必要です」というエラーが表示され続けます。

コードはこちら。私は何を間違っていますか?前もって感謝します。

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.
                Decompress.CopyTo(outFile);
                richTextBox1.LoadFile(Decompress.CopyTo(outFile), RichTextBoxStreamType.PlainText);
                // problem right here ^^^^


            }//using
        }//using
    }//using
}//DeCompress
4

2 に答える 2

2

ただの勘ですが、代わりにこれを試してください:

richTextBox1.LoadFile(outFile, RichTextBoxStreamType.PlainText);

Decompress.CopyTo(outFile)メソッドであり、何も返さないため、おそらく LoadFile メソッドがその行で咳をしています。

また、関数を次のように変更します (静的メソッドでコントロールを参照することはできません)。

public void Decompress(FileInfo fi)
于 2011-11-10T21:55:20.557 に答える
0

私がやったのはハックですが、基本的には圧縮されていないデータをファイルにダンプし、そのファイルをRTFにロードします。RTFに直接ストリーミングするよりもはるかに遅いと確信していますが、その部分を機能させることができませんでした. 機能的ですが、素晴らしいものではありません。プログラムの引数に基づいて fi 変数を Decompress に渡し、ユーザーが Windows で gz ファイルをダブルクリックしたときに実行されるプログラムを割り当てます。したがって、コードは次のようになります。

   public 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.
                    Decompress.CopyTo(outFile);
                    Decompress.Close();
                    outFile.Close();
                    inFile.Close();
                    rtbOut.LoadFile(origName, RichTextBoxStreamType.PlainText);
                    string tmp = rtbOut.Text;
                }//using
            }//using
        }//using
    } //Decompress
于 2011-11-16T17:46:24.670 に答える