2016-06-24 3 views
-2

파일 목록을 보려면 줄 단위로 어떻게 읽을 수 있습니까? 많은 파일이있는 디렉토리가 있습니다. 모든 파일을 목록에 저장하고 줄 단위로 하나씩 처리해야합니다.각 파일에 대한 줄 읽기 C#

가 지금까지 나는 다음과 같은 짓을 :

//fetching all files from directory 
DirectoryInfo d = new DirectoryInfo("path"); 
Dictionary<int, FileInfo> DatFiles = new Dictionary<int, FileInfo>(); 
int filecounter = 1; 


foreach (var dat in d.EnumerateFiles()) 
{ 
    DatFiles.Add(filecounter, dat); 
    filecounter++; 
} 
    Console.WriteLine(filecounter); 
foreach (var fileName in DatFiles) 
{ 

    foreach (var line in File.ReadLines(fileName.Value.OpenText().ToString())) 
    { 
     //run some methods 
    } 
} 

실행, 나는 예외를 받고 있어요, 파일을 찾을 수 없습니다. 목록에 파일 이름이 가득 차 있지만.

+0

모두 텍스트 파일입니까, 임의의 유형입니까? – Ian

+6

위의 코드에서 정확히 어떤 문제가 발생합니까? –

+0

DirectoryInfo를 사용하여 닫은 파일 목록을 가져 오려면 이제 [GetFiles] (https://msdn.microsoft.com/en-us/library/system.io.directoryinfo (v = vs.110))를 호출하십시오. aspx) 방법. 파일에서 텍스트 콘텐츠를 읽으려면 [StreamReader] (https://msdn.microsoft.com/en-us/library/system.io.streamreader (v = vs.110) .aspx)에 대한 내용을 읽어보십시오. – Igor

답변

1

EnumerateFiles()를 참조 실패하고 File.ReadLines()string 경로 인수를; 실제 파일의 경로를 제공하는 foreachFile.ReadLines(fileName.Value.FullName)을 사용하고 싶을 것입니다. OpenText()StreamReader 개체를 반환합니다.

+0

감사합니다. 훌륭한 설명 :) – WT86

+0

FileInfo가 이미있는 경우 File.ReadLines()를 사용해야하는 이유는 무엇입니까? – Paparazzi

+1

@Paparazzi 만약 그가 파일의 라인을 필요로한다면, StreamReader 객체를 관리 할 필요가 없습니다. 프레임 워크가 처리하도록하십시오. 이 방법은 그의 유스 케이스에 대해 더 간결 해 보이며 제시된 스타일 그대로 남아 있습니다. – Kateract

0

이 작은 코드가 작업 다른 모든

var files = Directory.GetFiles("path"); 
foreach(var f in files) 
{ 
    using(StreamReader reader = new StreamReader(f)) 
    { 
     var lines = reader.ReadToEnd().Split(new string[]{Environment.NewLine}); 
// Do here 
    } 

} 
+0

OP에는 FileInfo가 있으므로 사용하지 않는 것이 좋습니다. ReadLine 메소드가있을 때 모든 라인을 읽고 왜 분할합니까? – Paparazzi

+0

이 또는 ReadLine, 그가 원한 줄 알았던 모든 것이었지만 그는 라인별로 읽을 수 있습니다 ofcoure – MoustafaS

0

을해야는 FileInfo 개체의 목록이 반환 documentation

// Open the stream and read it back. 
using (StreamReader sr = fi.OpenText()) 
{ 
    string s = ""; 
    while ((s = sr.ReadLine()) != null) 
    { 
     Console.WriteLine(s); 
    } 
}