2013-02-16 2 views
0

Код ниже читает текстовый файл с заголовком пути и сопровождается списком имен файлов. код добавляет каждый файл (со второй строки и дальше) в ListView. По какой-то причине последние две строки никогда не достигаются. Любые идеи?C# does not pass foreach code

private void loadFromFile() 
    { 
     if ((faxInOn != null) && File.Exists(@"D:\Settings.ye")) 
     { 
      string[] s; 
      StreamReader sr = new StreamReader(@"D:\Settings.ye", Encoding.Default); 
      s = sr.ReadToEnd().Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); 
      faxInOn.changePath(s[0]); 
      foreach (string temp in s) 
       foreach (ListViewItem lvi in listView1.Items) 
        if (lvi.Text == temp.Substring(1)) 
         lvi.ImageIndex = int.Parse(temp.Substring(0, 1)); 
      sr.Close(); 
      sr.Dispose(); 
     } 
    } 

Благодаря

+1

какие последние 2 строки? закрывающие скобки? sr.Close() и sr.Dispose() ??? – scartag

+0

Что вы подразумеваете под «двумя последними строками»? Последние две строки кода или две последние строки текстового файла? Кроме того, рассмотрите использование 'File.ReadAllLines' или' File.ReadLines', которые являются более простыми способами получения строк из файла. Если вы * * хотите использовать 'StreamReader', используйте инструкцию' using'. –

+3

Кронштейны - ваши друзья. Даже если у вас есть только один оператор, добавление скобок делает ваш поток программы ** много понятным. – ChrisF

ответ

0

Попробуйте использовать File.ReadLines

Например:

// Read all lines in file, skipping the first header line 
foreach(var line in File.ReadLines(@"D:\Settings.ye").Skip(1)) 
{ 
    // add to list view 
} 
+0

Работа. Благодаря! –

+0

Вы действительно должны положить это в блок try-catch. Это, безусловно, может занять несколько исключений! – saegeoff

1

Путь используются Foreach блоки действительно неэффективна для того, что я думаю, что вы пытаетесь сделать. Кроме того, было бы намного проще и чище использовать блок «using (...)», чтобы ваши ресурсы были правильно очищены и обработаны правильно. Пожалуйста, смотрите: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

+0

Я попробую «за» вместо «foreach», может быть, это будет ответ. завернутый код с использованием, спасибо. update: Не нужно «for» вместо «foreach». –

+0

Я думаю, что foreach в порядке, чтобы использовать то, как у вас есть, но он неэффективен. Это будет производительность O (n^2). Честно, но, поскольку я предполагаю, что эти списки малы, это, вероятно, не будет большим делом. Я думаю, что сказанное выше ChrisF верно. Вероятно, вы получаете исключение, но использование должно обрабатывать его для вас. – saegeoff