You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让UWP中StorageFile.DisplayName统一排除FileType?

问题根源与解决方案

我之前也碰到过这个头疼的问题,其实DisplayName的行为差异完全是系统对不同文件夹的默认视图规则在起作用:

  • 应用私有目录(比如LocalFolder):系统默认不开启“隐藏已知文件类型扩展名”的设置,所以DisplayName会直接返回完整的文件名(包含扩展名)。
  • 公共媒体库(比如PictureLibrary):系统默认启用了隐藏已知扩展名的视图选项,因此DisplayName会自动剥离扩展名,只返回文件名主体。

想要在AppData目录下实现不带扩展名的DisplayName,根本不需要做字符串截取这类 workaround,直接修改文件的系统属性就能精准控制,具体步骤如下:

具体实现代码

创建文件后,直接设置文件的System.DisplayName属性:

using System.IO;
using System.Collections.Generic;
using Windows.Storage;

var fileName = "Test.gif";
var folderCreationOption = CreationCollisionOption.OpenIfExists;
var fileCreationOption = CreationCollisionOption.ReplaceExisting;

// 在LocalFolder创建目标文件
var settingsFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("SettingsFolder", folderCreationOption);
var file = await settingsFolder.CreateFileAsync(fileName, fileCreationOption);

// 手动设置DisplayName为不带扩展名的名称
var propertyDict = new Dictionary<string, object>();
// 直接指定System.DisplayName属性值
propertyDict["System.DisplayName"] = Path.GetFileNameWithoutExtension(fileName);
// 保存属性修改
await file.Properties.SavePropertiesAsync(propertyDict);

// 验证结果:此时file.DisplayName将返回"Test"
var finalDisplayName = file.DisplayName;

原理说明

StorageFile.DisplayName并非直接返回原始文件名,而是读取文件的System.DisplayName系统属性。如果这个属性没有被手动设置,系统会根据当前文件夹的视图规则自动生成:

  • 私有目录下默认生成带扩展名的名称
  • 媒体库下默认生成不带扩展名的名称

通过手动设置System.DisplayName属性,我们可以完全控制这个值的输出,彻底摆脱系统视图规则的影响。

内容的提问来源于stack exchange,提问作者Octopus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:37:48