2009-12-18 2 views
0

Эй, ребята, мне нужна небольшая помощь. Мне нужно StreamWriter выпрямить из имен файлов я получаю от а Directory.GetFiles называютC# Streamwriter help

string lines = (listBox1.Items.ToString()); 
     string sourcefolder1 = textBox1.Text; 
     string destinationfolder = (@"C:\annqcfiles"); 
     string[] files = Directory.GetFiles(sourcefolder1, lines + "*.ann"); 
     foreach (string listBoxItem in listBox1.Items) 
     { 
     Directory.GetFiles(sourcefolder1, listBoxItem + "*.txt"); 
     StreamWriter output = new StreamWriter(destinationfolder + "\\" + listBoxItem + ".txt"); 
     } 

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

Спасибо за любые советы.

ответ

5
foreach (string listBoxItem in listBox1.Items) 
    { 
    using (StreamWriter output = new StreamWriter(destinationfolder + "\\" + listBoxItem + ".txt")) 
    { 
      foreach (string fileName in Directory.GetFiles(sourcefolder1, listBoxItem + "*.txt")) 
      { 
       output.WriteLine(fileName); 
      } 
    } 
    } 
+1

+1 для использования используя. Я не понимаю, почему это не используется в большем количестве примеров и больше людей. Я знаю, что я не C# pro, но похоже, что это хороший способ не забыть закрывать и распоряжаться вещами. – Tester101

+0

Tester101, int File.WriteAllxxx() используется встроенное –

0

Вы должны закрыть StreamWriter.

Или обернуть StreamWriter в using заявлении, это будет распоряжаться и закрывать поток автоматически.
Причиной этого является то, что ваш поток будет держать ваш выход в буфер и только записать его в файл, когда:
- определенный порог достигается
- вы называете флеш на ней явно
- закрыть или распоряжаться поток

2

С GetFiles возвращает string[], не используйте StreamWriterна всех - просто

File.WriteAllLines(path, files); 

где files - это string[] путей для записи, а path - файл назначения.

+0

Это было бы прекрасно, если бы я только хотел, чтобы имя файла – 2009-12-18 21:04:57

+0

Как вы это понимаете? Я не понимаю ... –

+0

когда я выписываю результат в текстовый файл, у него есть полный путь + имя файла, все, что мне нужно, это имя файла – 2009-12-18 21:27:57

0

Вы должны обернуть StreamWriter в использовании заявление, которое будет смывать и закрыть StreamWriter

using(StreamWriter output = new StreamWriter(destinationfolder + "\\" + listBoxItem + ".txt")) 
{ 
    //Any code that writes in output 
} 
1

Две вещи. Во-первых, вам действительно нужно записать данные в StreamWriter, а во-вторых, вам нужно убедиться, что вы закрываете StreamWriter, чтобы он действительно попал в файл.

Попробуйте это:

foreach (string listBoxItem in listBox1.Items) 
{ 
    String[] filesInFolder Directory.GetFiles(sourcefolder1, listBoxItem + "*.txt"); 

    using(StreamWriter output = new StreamWriter(destinationfolder + "\\" + listBoxItem + ".txt")) 
    { 
     foreach(string filename in filesInFolder) 
     { 
      output.Write(filename); 
     } 
    } 
} 

using оператор гарантирует, что StreamWriter закрывается, когда выполнение выходит из блока, используя.

В качестве альтернативы, если это все, что вы пишете в файл, вы можете взглянуть на метод Files.WriteAllLines(...).