2011-11-10 5 views
1

Fondamentalement, tout ce que je veux, c'est charger un fichier Gziped dans une zone de texte enrichi. J'ai trouvé du code sur le site MS .NET pour décompresser le fichier. Maintenant, je veux pointer ce flux vers une zone de texte riche, mais je reçois toujours l'erreur "Une référence d'objet est requise pour le champ non statique, la méthode ou la propriété 'WindowsFormsApplication1.Form1.richTextBox1'"Erreur non statique lors du chargement de filestream dans RichTextBox à partir de la procédure de décompression Gzip

Le code est ici. Qu'est-ce que je fais mal? Merci d'avance.

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 

Répondre

2

Juste une intuition, mais essayez ceci:

richTextBox1.LoadFile(outFile, RichTextBoxStreamType.PlainText); 

Le Decompress.CopyTo(outFile) est une méthode et ne retourne rien, ce qui est probablement la raison pour laquelle la méthode LoadFile tousse sur cette ligne.

Aussi, changer votre fonction à ce (vous ne pouvez pas avoir votre contrôle référencé dans une méthode statique):

public void Decompress(FileInfo fi) 
+0

Vous avez raison. Mais cela produirait une erreur de compilateur différente de celle mentionnée par le PO. Cela n'a pas de sens. Peut-être qu'il a juste collé le mauvais. –

+0

@Charles Vous avez raison. L'exemple qu'il a soulevé est une méthode statique. "problème ici ^^^^" indique le mauvais problème. – LarsTech

0

Ce que je fini par faire est un hack, mais au fond, je largue les données non compressées à un fichier puis charger ce fichier dans le RTF. Je suis sûr que c'est beaucoup plus lent que de le diffuser directement sur RTF mais je n'arrive pas à faire fonctionner cette pièce. C'est fonctionnel, mais pas génial. Je passe la variable fi à Decompress en fonction de ce que l'argument du programme est, et j'affecte ensuite ce programme à exécuter lorsqu'un utilisateur clique deux fois sur un fichier gz dans Windows. Donc, le code ressemble à ceci:

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 
Questions connexes