Нестатическая ошибка при попытке загрузить файловый поток в RichTextBox из процедуры распаковки Gzip - PullRequest
1 голос
/ 11 ноября 2011

В принципе, все, что я хочу, это загрузить файл Gziped в текстовое поле. Я нашел код на сайте 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

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Просто догадка, но попробуйте вместо этого:

richTextBox1.LoadFile(outFile, RichTextBoxStreamType.PlainText);

Decompress.CopyTo(outFile) - это метод, который ничего не возвращает, возможно, поэтому метод LoadFile кашляет в этой строке.

Кроме того, измените свою функцию на эту (вы не можете ссылаться на свой элемент управления в статическом методе):

public void Decompress(FileInfo fi)
0 голосов
/ 16 ноября 2011

То, что я закончил, это хак, но в основном я выгружаю несжатые данные в файл, затем загружаю этот файл в RTF. Я уверен, что это намного медленнее, чем потоковая передача напрямую в RTF, но я не смог заставить эту часть работать. Это функционально, но не замечательно. Я передаю переменную fi в Decompress, основываясь на аргументе программы, и затем назначаю эту программу для запуска, когда пользователь дважды щелкает файл gz в Windows. Итак, код выглядит так:

   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
...