2013-04-25 4 views
1

Так что я пишу код, который проходит через каталог .xlsx файлов и выбирает файл, который был создан последним. Это простая задача, но есть что-то странное, что происходит с свойством Name конкретного объекта FileInfo, и, возможно, в этом случае происходит больше случаев.

Вот мой код:

 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 важно, потому что я использую его, чтобы запросить последнюю версию файла для информации и ее отображения. Однако свойство Name конкретного .xlsx файла (потенциально больше) появляется так: ~$File.xlsx, когда на самом деле имя файла действительно File.xlsx. Это приводит к тому, что свойство FullName содержит эти символы.

Есть ли способ исправить это? Что вызывает это?

+2

Офисные инструменты Microsoft, такие как excel и work, создают временные файлы, начинающиеся с ~ $. Я думаю, что эти файлы существуют в вашей папке, и класс File просто показывает эту информацию. – svrcoder

ответ

4

Открытие файла xlsx приводит к созданию Excel скрытого файла с тем же именем, которому предшествует «~ $». Поэтому, если один из этих файлов Excel открыт в то время, когда вы загружаете содержимое каталога, вы также получите временный файл.

Добавить фильтр, исключающий скрытые файлы, и ваша проблема исправлена.

Пример:

FileAttributes attributes = File.GetAttributes(path); 

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

От http://msdn.microsoft.com/en-us/library/system.io.file.getattributes.aspx

+0

Будет ли что-то вроде 'File.Name.Contains (" ~ $ ")' быть эффективным? –

+1

@DerekW: Я бы использовал пример, который я предоставил, таким образом вы убедитесь, что скрытые файлы не обслуживаются, что может помочь избежать других проблем. – CodeZombie

1

~$ указывает, что файл является временный файл, используемый Microsoft Office. См. here для получения дополнительной информации.

 Смежные вопросы

  • Нет связанных вопросов^_^