为什么FileInfo对象的Name属性以"~$"开头?

本文关键字:quot 开头 对象 FileInfo Name 属性 为什么 | 更新日期: 2023-09-27 18:11:04

所以我正在编写一些代码,它将遍历.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很重要,因为我使用它来查询最新的文件以获取信息并显示它。但是,特定.xlsx文件(可能更多)的Name属性看起来像这个~$File.xlsx,而实际上文件名实际上是File.xlsx。这导致FullName属性也包含这些字符。

有办法解决这个问题吗?是什么引发的呢?

为什么FileInfo对象的Name属性以"~$"开头?

打开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

~$表示该文件是Microsoft Office使用的临时文件。