【问题标题】:Why does the Name Property of FileInfo object start with "~$"?为什么 FileInfo 对象的 Name 属性以“~$”开头?
【发布时间】:2013-04-25 14:11:32
【问题描述】:

所以我正在编写一些代码,这些代码会遍历.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 属性也包含这些字符。

有没有办法解决这个问题?什么触发了这个?

【问题讨论】:

  • Microsoft Office 工具(如 excel 和 work)会创建以 ~$ 开头的临时文件。我认为这些文件存在于您的文件夹中,而 File 类只是显示该信息。

标签: c# .net xlsx fileinfo directoryinfo


【解决方案1】:

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

【讨论】:

  • File.Name.Contains("~$") 这样的东西会有效吗?
  • @DerekW:我会使用我提供的示例,这样可以确保不提供隐藏文件,这也可能有助于避免其他问题。
【解决方案2】:

~$ 表示该文件是 Microsoft Office 使用的临时文件。更多信息请参见here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2012-12-11
    • 2017-12-12
    • 2011-03-15
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多