2010-11-19 27 views
12

Sahip olduğum soru, bir metin dosyasından satır okuma işleminin sadece okunmak yerine bir diziye dönüştürülmesi ile ilgilidir. can ile benim kodlarıC# nasıl String dizisine File.ReadLines dönüştürmek için?

hata string[] lines = File.ReadLines("c:\\file.txt"); de görünmüyor implicity dönüştürme ....

birisi bir dizi formatında sonuçları kaydetmek için kodlarıyla ilgili tavsiyelerde misiniz? Sonuçları bir dizide kaydedebilen ReadAllLines kodunu da yerleştirdim. Teşekkürler!

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 Kodlar:

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' zaten istediğiniz şeyi yapıyor gibi görünüyor, bu yüzden neden bunun için ReadLines'i kullanmaya çalışıyorsunuz? – Gabe

+0

Aşağıdaki yorumlara bakın. Teşekkürler. – JavaNoob

cevap

26

File.ReadLines()System.Collections.Generic.IEnumerable<String>
File.ReadAllLines() dizeleri dizisi döndürür türünde bir nesne döndürür.

Bir dizi dizgi kullanmak isterseniz, doğru işlevi çağırmanız gerekir.

Jim çözümünü kullanabilirsiniz, sadece ReadAllLines() kullanın veya dönüş türünüzü değiştirebilirsiniz.

Bu aynı zamanda olur

çalışır:

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

Sen IEnumerable uygulayan herhangi jenerik koleksiyonu kullanabilirsiniz. Bir örnek için IList.

+0

DönüşYolları bir tanım değildir. Sistem öyle görünüyor. – JavaNoob

+0

Ah Şimdi yazım hatası görüyorum. Cevabı güncelledim, ReadLines olmalı. Bir dizi gerekiyorsa, ReadAllLines() kullanmaktır. Eğer bir koleksiyon kullanabilirsiniz ReadLines() büyük dosyalar üzerinde daha iyi çalışır çünkü tek tek satırlar sadece gerektiğinde çekilir. –

+1

Yup, ReadLines'te daha büyük bir dosyanın kullanılmasına izin verme fikrinin bir sonucudur. Yani yukarıdaki kodlar ReadAllLines'e benzer değil mi? – JavaNoob

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

yapmanız isteyeceksiniz neden bir merak olsa o zaman ReadAllLines inşaat iyi.

Ya da belki sadece File.ReadLines dönüş değeri ile numaralandırmak istiyorum:

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

ReadAllLines yerine Readlines kullanmanın nedeni dosya boyutudur. Büyük metin dosyaları için bir arabelleğin taşmasına neden olabileceğinden tavsiye edilir. – JavaNoob

+4

Ancak "ToArray" öğesini çağırmak, ReadLines işlevini çağırmanın herhangi bir yararını ortadan kaldıracaktır. Göstericiyi gösterdiğim gibi kullan. –

+0

Sayım, ReadLines işlevlerini kullanıyor mu? – JavaNoob

1

string[] lines = File.ReadLines("c:\\file.txt"); değiştir IEnumerable<string> lines = File.ReadLines("c:\\file.txt"); Kodunuzun geri kalanı düzgün çalışmalıdır.

İlgili konular