2013-10-04 3 views
0

У меня есть функция, которая должна извлечь файл .gz и загрузить его в память, вопрос в том, как я прочитал содержимое файла, как только он был загружен в память без необходимости сначала сохранить его на диск?Как читать содержимое файла txt, загруженного в память

public static void Decompress2(FileInfo fileToDecompress) 
{ 
    using (FileStream fileStream = fileToDecompress.OpenRead()) 
    { 
     using (var memStream = new MemoryStream()) 
     { 
      string currentFileName = fileToDecompress.FullName; 
      string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length); 

      using (FileStream decompressedFileStream = File.Create(newFileName)) 
      { 
       using (GZipStream decompressionStream = new GZipStream(fileStream, CompressionMode.Decompress)) 
       { 
        byte[] bytes = new byte[4096]; 
        int n; 
        while ((n = decompressionStream.Read(bytes, 0, bytes.Length)) != 0) 
        { 
         memStream.Write(bytes, 0, n); 
        } 
       } 
      } 
     } 
    } 
} 
+2

Вы можете использовать StreamReader и записать его как байты или двоичный код – user1956570

+0

возможно дубликат - http://stackoverflow.com/a/2522921/ 1057667 –

ответ

0
private int _bufferSize = 16384; 

private void ReadFile(string filename) 
{ 
StringBuilder stringBuilder = new StringBuilder();  
FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read); 

using (StreamReader streamReader = new StreamReader(fileStream))  
{   
    char[] fileContents = new char[_bufferSize];   
    int charsRead = streamReader.Read(fileContents, 0, _bufferSize); 

    // Can't do much with 0 bytes   
    if (charsRead == 0)    
     throw new Exception("File is 0 bytes"); 

    while (charsRead > 0)   
    {    
     stringBuilder.Append(fileContents);    
     charsRead = streamReader.Read(fileContents, 0, _bufferSize); 
    }  
} 

}

Надеется, что это поможет вам

Смежные вопросы