2012-04-24 2 views
0

StreamWriter 클래스를 사용하여 0부터 30까지 순차적으로 이름이 지정된 일련의 파일을 만듭니다. 루프에서 다시 읽으려고 할 때, 그리고 두 파일을 비교할 때 0은 10과 비교되고 11은 19와 같아지고 0은 2와 21과 비교됩니다. 0을 1, 2를 2 등과 비교할 수있는 방법이 있습니까? Directory.GetFiles()로 파일을 읽습니다.파일이 순서대로 나열되어 있지 않습니다.

감사합니다.

+4

있도록 이름 xxx00, xxx01, xxx02, ... xxx09, xxx10, xxx11, ..., xxx30이다? 'String.Format ("xxx {0:00}", n)''n '은 파일 번호이고'xxx'는 접두사입니다. 내 맥에있어 구문 오류를 만들었을 수도 있고, 이것을 테스트하지 못했을 수도있다. 분명히 : P –

+0

알았어! :) –

+0

감사합니다 @WordsLikeJared, 당신의 솔루션이 작동했습니다! –

답변

3

Directory.GetFiles(); 단지 문자열 배열을 반환

예를 들어,

 var files = Directory.GetFiles(); 
     var orderedFiles = files.OrderBy(s=>int.Parse(s)); 

     foreach (string s in orderedFiles) 
     { 
      Console.WriteLine(s); 
     } 

참고 : int.Parse 호출하기 전에 Path.GetFileNameWithoutExtension를 사용해야하고 대신 int.TryParse을 사용할 수 있습니다.

+0

's'는'1.ext' 일 수 있으므로 int로 구문 분석 할 수 있습니까? 이게 효과가 있니? – Kaf

+0

@Kaf 이름이 # .ext 형식으로되어 있다고 보장 할 수 있다면'int.Parse (s.split (".") [0])' –

+0

@matt는 작동하지만 Path.GetFileNameWithoutExtension은 life eaiser –

2

MSDN page on Directory.GetFiles()을 참조하십시오. 특히주의 할 점은 다음과 같습니다.

반환되는 파일 이름의 순서는 보장되지 않습니다. 특정 정렬 순서가 필요한 경우 Sort() 메서드를 사용하십시오.

파일 이름을 가져 와서 직접 정렬해야합니다.

일반적으로 파일은 이름 순서로 반환되지만 그 경우 주문은 0,1,11,12, ..., 2,20,21, ... 3 등이됩니다. Windows 탐색기에서 이름순으로 정렬합니다. 다른 사람이 이미 제안했듯이 가장 좋은 방법은 앞에 0을 붙여 넣는 것입니다. 나는. 그들을 순서를 아주 쉽게 될 수 있도록 00, 01, 02, 03, ..., 10, 11, 12 등

2

트릭을 수행합니다. 작성 시간 순서에 따라 정렬

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("YourDirectoryPath"); 
System.IO.FileInfo[] files = di.GetFiles(); 

var sortedFiles = from f in files 
          orderby f.CreationTime ascending 
          select f; 
왜 파일을 생성하지
+1

+1하지만 DirectoryInfo를 사용하는 것은 속임수입니다.) FileInfo의 배열을 사용하면 훨씬 많은 옵션을 제공하므로 문자열 배열을 사용하는 대신 좋은 방법입니다 –

관련 문제