2015-03-22 3 views
0

У меня есть следующий код: http://pastebin.com/HSjspbekStream Writer не записывает в файл, без исключения имеет file.close();

if (direction == "left" && mazearray[xIndex - 1, yIndex].canPass == false && x <= (xIndex * 18) + 3) 
{ 

    System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\vroy\Desktop\LOG.txt"); 

    file.WriteLine("ENTERING LEFT"); 
    file.WriteLine(x + " , " + y); 
    if (PacMan.yIndex > yIndex) 
    { 
     file.WriteLine("yIndex more"); 
    } 
    if (PacMan.yIndex < yIndex) 
    { 
     file.WriteLine("yIndex less"); 
    } 
    if (PacMan.xIndex == xIndex) 
    { 
     file.WriteLine("xIndex same"); 
    } 
    file.WriteLine("METHOD CALL ENDED"); 


    if (PacMan.yIndex > yIndex && mazearray[xIndex, yIndex + 1].canPass == true) 
    { 
     direction = "down"; 
     Console.WriteLine("CHOICE DOWN"); 
     return; 
    } 
    if (PacMan.yIndex < yIndex && mazearray[xIndex, yIndex].canPass == true && y <= (yIndex * 18) + 3) 
    { 
     file.WriteLine("ENTERING UP"); 
     direction = "up"; 
     return; 
    } 
    if (PacMan.xIndex == xIndex) 
    { 
     if (mazearray[xIndex, yIndex + 1].canPass == true) 
     { 
      direction = "down"; 

     } 
     else 
     { 
      direction = "up"; 
     } 


    } 
    file.Close(); 
} 

Как вы можете видеть, что близкий метод для объекта StreamWriter ближе к концу этого метода. Однако текстовый файл, который я пишу, тоже не изменяется.

+0

В следующий раз вы можете написать свой код в своем вопросе как текст, а не просто ссылаться на пастебин страницы. –

+0

Не отвечайте на свой вопрос, но вместо того, чтобы писать собственные журналы, используйте что-то вроде log4net. Это сделает вашу жизнь намного проще. – silent

+0

@silent: * Если * контекст позволяет это. Я однажды искал библиотеку протоколирования, которая не ограничивала мои будущие варианты платформ, и в то время я закончил тем, что отказался, потому что у всех обычных библиотек ведения журналов были некоторые ограничения относительно использования в Silverlight, в Mono, в Mono для Android, и т. д. –

ответ

0

Положите StreamWriter в использовании высказыванием:

using (StreamWriter file = new StreamWriter(@"C:\Users\vroy\Desktop\LOG.txt")) 
{ 
    file.WriteLine("ENTERING LEFT"); 

    // Rest of code... 
} 

Это по существу ставит код в try/finally блоке с Close/Dispose внутри finally. Таким образом, файл всегда закрывается, даже когда вы нажимаете «return».

+0

вы закодировали пропуски «нового StreamWriter» – DrKoch

+0

@DrKoch Исправлено, спасибо. – RagtimeWilly

+1

Это еще не объясняет, почему было бы лучше, чем писать 'Close', как это делается в настоящее время (подумайте о операторах' return'). –

2

Вы должны инкапсулировать свои StreamWriter в using конструкции:

using(Streamwriter sw = new StreamWriter(...) 
{ 
    ... 
} 

Это будет закрывать (и буферов записи в файл) во всех случаях (за исключением, возврат и т.д.)

В своем коде вы имеете много return заявление, которое оставляет поток открытым, и уже написанный текст в буферах никогда не покраснеть к вашему файлу ...