2010-11-19 2 views
12

Вопрос, который у меня есть, заключается в преобразовании процесса чтения строк из текстового файла в массив, а не просто его чтения.C# как преобразовать File.ReadLines в строковый массив?

ошибки в моих кодах появляются string[] lines = File.ReadLines("c:\\file.txt"); с не может неявно преобразовать ....

Может кто-то пожалуйста, сообщите о кодах, чтобы сохранить результаты в виде массива? Я поместил код ReadAllLines, который также может сохранять результаты в массиве. Благодаря!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 

namespace Testing 
{ 
class Analysis 
{ 
    static void Main() 
    { 
     string[] lines = File.ReadLines("c:\\file.txt"); 

     foreach (string r in lines) 
     { 
      Console.WriteLine("-- {0}", r); 
     } 

     // Keep the console window open in debug mode. 
     Console.WriteLine("Press any key to exit."); 
     System.Console.ReadKey(); 
    } 
} 
} 

ReadAllLines коды:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 

namespace Testing 
{ 
class ReadFromFile 
{ 
    static void Main() 
    { 
     string[] lines = System.IO.File.ReadAllLines 
     (@"C:\Users\Public\TestFolder\WriteLines2.txt"); 

     System.Console.WriteLine("Contents of writeLines2.txt =:"); 
     foreach (string line in lines) 
     { 
      Console.WriteLine("\t" + line); 
     } 

     // Keep the console window open in debug mode. 
     Console.WriteLine("Press any key to exit."); 
     System.Console.ReadKey(); 
    } 
} 
} 
+4

Похоже, что 'ReadAllLines' уже делает то, что вы хотите, так почему вы пытаетесь использовать' ReadLines' для этого? – Gabe

+0

Посмотрите на комментарии ниже. Благодарю. – JavaNoob

ответ

26

File.ReadLines() возвращает объект типа System.Collections.Generic.IEnumerable<String>
File.ReadAllLines() возвращает массив строк.

Если вы хотите использовать массив строк, вам нужно вызвать правильную функцию.

Вы можете использовать решение Jim, просто используйте ReadAllLines() или вы можете изменить тип возврата.

Это будет также работать:

System.Collections.Generic.IEnumerable<String> lines = File.ReadLines("c:\\file.txt"); 

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

+0

ReturnLines не является защитой. Это то, что показывает система. – JavaNoob

+0

А теперь я вижу свою опечатку. Я обновил ответ, который должен быть ReadLines. Дело в том, что если вам нужен массив, используйте ReadAllLines(). Если вы можете использовать коллекцию ReadLines(), то лучше работать с большими файлами, потому что отдельные линии при необходимости извлекаются. –

+1

Yup thats kinda идея позволить большему файлу использоваться в ReadLines. Таким образом, приведенные выше коды не похожи на ReadAllLines? – JavaNoob

16
string[] lines = File.ReadLines("c:\\file.txt").ToArray(); 

Хотя один удивляется, почему вы хотите, чтобы сделать это, когда ReadAllLines работает просто отлично.

Или, возможно, вы просто хотите перечислить с возвращаемым значением File.ReadLines:

var lines = File.ReadAllLines("c:\\file.txt"); 
foreach (var line in lines) 
{ 
    Console.WriteLine("\t" + line); 
} 
+0

Причина использования Readlines вместо ReadAllLines обусловлена ​​размером файла. Рекомендуется использовать большие текстовые файлы, так как это может привести к переполнению буфера. – JavaNoob

+4

Но вызов 'ToArray' будет отрицать любое преимущество вызова' ReadLines'. Используйте перечислитель, как я показал. –

+0

Включает ли счетчик функции ReadLines? – JavaNoob

1

Изменение string[] lines = File.ReadLines("c:\\file.txt"); до IEnumerable<string> lines = File.ReadLines("c:\\file.txt"); Остальная часть вашего кода должна работать нормально.

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