2015-01-05 2 views
-4

Я новичок в потоках, а в программе, которую я разрабатываю, требуется чтение данных из шестнадцатеричного файла.System.IO.MemoryStream не может получить доступ к закрытому файлу

File = level.dat

Код им с помощью:

FileStream fs; 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     Main("PCWorld\\level.dat"); 
     NbtTree nbtTree = new NbtTree(); 
     Stream s = fs; 
     Stream destStream = new MemoryStream(); 
     nbtTree.ReadFrom(s); 
     nbtTree.WriteTo(destStream); 
    } 

недействительным Main():

void Main(string filename) 
    { 
     // From MSDN Forums, slightly modified by me 
     try 
     { 
      string fileName = filename; 

      // Create random data to write to the file. 
      byte[] dataArray = new byte[100000]; 
      new Random().NextBytes(dataArray); 

      using (FileStream 
       fileStream = new FileStream(fileName, FileMode.Create)) 
      { 
       // Write the data to the file, byte by byte. 
       for (int i = 0; i < dataArray.Length; i++) 
       { 
        fileStream.WriteByte(dataArray[i]); 
       } 

       // Set the stream position to the beginning of the file. 
       fileStream.Seek(0, SeekOrigin.Begin); 

       // Read and verify the data. 
       for (int i = 0; i < fileStream.Length; i++) 
       { 
        if (dataArray[i] != fileStream.ReadByte()) 
        { 
         MessageBox.Show("Failed to load " + fileName + " (MCPC.dll)\n\nReason: Failed to read bytes\nResult: Close();\nSoloution: Try again and/or tell DMP9 Software", "Error"); 
         Close(); 
         return; 
        } 
        fs = fileStream; 
       } 
      } 
     } 
     catch (OutOfMemoryException ex) 
     { 
      MessageBox.Show("Failed to load NBT++.PC.exe\n\nReason: Out of memory (System.OutOfMemoryException: " + ex.Message + ")\nResult: Close();\nSoloution: Your PC Does not have enough RAM to run NBT++", "Error"); 
      Close(); 
     } 
    } 

Моя программа имеет ссылку на субстрате (https://code.google.com/p/substrate-minecraft/downloads/list) и что делает большая часть работы, но ее код, дающий «Не удается открыть закрытый файл»

Любая помощь? Благодаря ...

+0

* где * это сбой с этим исключением? –

+0

@RowlandShaw 'nbtTree.ReadFrom (s)' – DMP9

ответ

2

Ваша проблема заключается в:

Stream s = fs; 

пФ FileStream закрывается в основной метод (с помощью заявления распоряжается FILESTREAM). Чтобы исправить это, вы должны открыть новый FILESTREAM для чтения из файла:

Stream s = new FileStream("PCWorld\\level.dat", FileMode.Read); 
+0

Thanks peer! Это очень помогает. – DMP9

0

При использовании

using (FileStream fileStream = new FileStream(fileName, FileMode.Create)) 
{...} 

вы закрываете это FILESTREAM, когда вы выходите сферы. Таким образом, вы должны повторно открыть файл для чтения

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

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