2013-06-18 12 views
-5

디렉터리에서 C : 디렉토리의 최신 사용 파일을 반환하는 메서드를 만들고 싶습니다. .GetFiles() 메서드는 System.IO 네임 스페이스에 있습니다. NET 2.0과의 호환성을 유지하기 위해 LINQ 없이도이 작업을 수행 할 수 있습니다. 가능하면 FilePath가 File Object가 아닌 문자열로 반환 될 수도 있습니다. 구조는 아래와 같아야하지만 최신 파일 만 볼 수는 있습니까?C#의 System.IO 네임 스페이스에서 GetFiles 만 사용하여 디렉토리에서 가장 최근에 만들어진 파일을 가져 오는 방법

public static string NewestFileofDirectory(string DirectoryName) 
{ 
foreach(string File in Directory.GetFiles(DirectoryName)) 
{ 
    if(new FileInfo(File).CreationDate > ???) //here I stuck 
    { 
    //interesting what would be here... 
    } 
} 
} 

답변

3

당신은 FileInfoDirectoryInfo 클래스를 사용하여이 작업을 수행 할 수 있습니다. 먼저 지정된 디렉토리에있는 모든 파일을 가져 와서 LastWriteTime을 다른 디렉토리와 비교하여 가장 최근의 writte 또는 최근 파일을 비교할 수 있습니다. 이 방법의 코드는 Here is입니다.

/// <summary> 
/// Returns recently written File from the specified directory. 
/// If the directory does not exist or doesn't contain any file, null is returned. 
/// </summary> 
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param> 
/// <returns></returns> 
public static string NewestFileofDirectory(string directoryPath) 
{ 
    DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath); 
    if (directoryInfo == null || !directoryInfo.Exists) 
     return null; 

    FileInfo[] files = directoryInfo.GetFiles(); 
    DateTime recentWrite = DateTime.MinValue; 
    FileInfo recentFile = null; 

    foreach (FileInfo file in files) 
    { 
     if (file.LastWriteTime > recentWrite) 
     { 
      recentWrite = file.LastWriteTime; 
      recentFile = file; 
     } 
     } 
     return recentFile.Name; 
} 
+0

무엇이 오류입니까? –

+0

@feedwall 예, 파일 이름이 아닌 FileInfo 개체를 반환하기 때문에이 오류가 발생합니다. –

+0

@feedwall 내 대답을 확인하십시오. 이제 파일 이름을'return recentFile.Name;'으로 반환했습니다. 이제는 제대로 컴파일 될 것입니다. –

3

상용어 검색 올리기. LINQ에 대한 하나님 감사합니다 :)

var minTime = DateTime.MinValue; 

string theFile = null; 

foreach (var entry in Directory.GetFiles(dirName)) 
{ 
    if (File.GetCreationTimeUtc(entry) > minTime) 
    { 
     minTime = File.GetCreationTimeUtc(entry); 
     theFile = entry; 
    } 
} 
+0

"using System.IO;"를 추가하십시오. 그 일 했니? 이 방법은 .Net 2.0 (MSDN에 따라)에 있으므로 문제는 아닙니다. – Vivek

+1

@feedwall'dirName'은 그가 당신의 디렉토리 이름을 부르고있는 것을 나타 내기 위해 그가 사용하고있는 더미 변수 일뿐입니다. 귀하의 경우 그것은'directoryPath' 것 같아요. 코드가하는 일을 이해하려고 노력하십시오. – jszigeti

+0

'theFile'이됩니다. ['var'] (http://msdn.microsoft.com/en-us/library/bb383973.aspx)는 변수의 유형이 컴파일러에 의해 결정된다는 것을 의미합니다. 마치'string'이라고 말한 것처럼 보이지만 많은 사람들은 변수에 특별한 일을하지 않을 때'var' 단축키를 사용하는 경향이 있습니다. – jszigeti