2013-04-25 3 views
1

그래서 .xlsx 디렉토리의 디렉토리를 거쳐 마지막으로 생성 된 파일을 선택하는 코드를 작성하고 있습니다. 간단한 작업이지만 특정 FileInfo 개체의 Name 속성에 약간 이상한 일이 있으며 잠재적으로 더 많은 경우가 있습니다. 나는 정보의 최신 파일을 조회하고 표시하는 데 사용하기 때문에

 DirectoryInfo di = new DirectoryInfo(FolderPath); 
     FileInfo[] FileArray = di.GetFiles("*.xlsx", SearchOption.AllDirectories); 
     if (FileArray.Count() != 0) 
     { 
      DateTime latestDate = DateTime.MinValue; 
      string FileName = String.Empty; 
      foreach (FileInfo File in FileArray) 
      { 
       if (File.CreationTime > latestDate) 
       { 
        latestDate = File.CreationTime; 
        FileName = File.FullName; 
       } 
      } 
     } 

FileName가 중요하다

여기 내 코드입니다. 그러나 파일 이름이 실제로 File.xlsx 일 때 Name 특정 .xlsx 파일 (잠재적으로 more)의 속성은 ~$File.xlsx처럼 표시됩니다. 이로 인해 FullName 속성뿐만 아니라 이러한 문자가 포함됩니다.

이 문제를 해결할 방법이 있습니까? 이것을 유발하는 요인은 무엇입니까?

+2

Excel과 같은 Microsoft Office 도구는 ~ $로 시작하는 임시 파일을 만듭니다. 나는이 파일들이 여러분의 폴더에 있고 File 클래스가 그 정보를 보여주고 있다고 생각한다. – svrcoder

답변

4

xlsx 파일을 열면 Excel에서 "~ $"이 (가) 앞에 오는 동일한 이름의 숨김 파일을 만듭니다. 따라서 이러한 Excel 파일 중 하나가 디렉토리 내용을 검색 할 때 열려 있으면 임시 파일도 가져옵니다.

숨김 파일을 제외하는 필터를 추가하면 문제가 해결됩니다.

예 :

FileAttributes attributes = File.GetAttributes(path); 

if((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) 
{ 
    // Hidden file, just skip it 
} 

+0

'File.Name.Contains ("~ $")'과 같은 것이 효과적일까요? –

+1

@DerekW : 제공된 예제를 사용하면 숨겨진 파일이 제공되지 않도록 할 수 있으므로 다른 문제도 피할 수 있습니다. – CodeZombie