2013-04-01 3 views
0

Я не могу открыть файл.Почему файл не открывается?

private void button1_Click(object sender, EventArgs e) 
{ 
    // Load the CSV file 
    var lines = File.ReadAllLines(@"C:\chat.csv"); 

    var xml = new XElement("Chat-Log",   // To convert to XML 
     lines.Select(line => new XElement("Item", 
      line.Split('|')      // indicate split 
      .Select((column, index) => new XElement("Column" + index, column))))); 

    xml.Save(@"C:\xml-out.xml");  // Save to XML file 

    MessageBox.Show("Converted to XML"); 

    FileStream fileStream = new FileStream(@"c:\xmlout.xml", FileMode.Open); 
    try 
    { 
     TextWriter tw = new StreamWriter("c:\\xml-out.xml"); 
    } 
    finally 
    { 
     fileStream.Close(); 
    } 
} 

Вышеприведенный фрагмент кода должен открыть C:\xml-out.xml, справа?

TextWriter tw = new StreamWriter("c:\\xml-out.xml"); 

Я понятия не имею, почему он не открывает файл. Любая подсказка?

Я пробовал various options.

+0

Когда я запускаю это, он преобразуется в файл, показывает окно сообщения, но не открывает преобразованный файл. –

+2

И есть ли исключение? –

+1

Есть ли сообщения об ошибках? Файл создан, но пустой? Какую операционную систему ты используешь? Если Windows 7 или выше, попробуйте записать в папку пользователя или настроить разрешения, чтобы убедиться, что вы можете напрямую писать на диск C :. – someone1

ответ

3

По какой-то причине вы открываете поток и , затем, пытаясь создать для него писателя.

Если файл не существует раньше, то вызов new FileStream(@"c:\xmlout.xml", FileMode.Open) будет сгенерировано исключение ... и если файл сделал существовать раньше, то вы не сможете открыть писателя к нему в после того, как вы все еще открыли файл для чтения. Вы также закрываете FileStream в блоке finally, но никогда не закрываете StreamWriter, что является нечетным.

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

Вы должны использовать using заявление, так что вам не нужно явно try/finally блок:

using (StreamWriter writer = File.CreateText(@"c:\xml-out.xml")) 
{ 
} 

Конечно, есть то вероятность того, что у вас нет разрешения на создание файла на корень файловой системы ...

+0

Большое спасибо за ваше время. Я избавился от блока try/finally и заменил его «использованием». Я также изменил код, теперь StreamWriter закрывается, и файл фактически открывается. Спасибо! –