.net是否有办法确定本地文件系统是否区分大小写?
您可以在temp文件夹中创建一个文件(使用小写文件名),然后检查文件是否存在(使用大写文件名),例如:
string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower(); File.CreateText(file).Close(); bool isCaseInsensitive = File.Exists(file.ToUpper()); File.Delete(file);
.NET类库中没有这样的功能.
但是,您可以自己推出:尝试使用小写名称创建文件,然后尝试使用其名称的upparcase版本打开它.可能有可能改进这种方法,但你明白了.
编辑:您实际上只需要获取根目录中的第一个文件,然后检查filename.ToLower()和filename.ToUpper()是否都存在.不幸的是,很可能存在同一文件的大写和小写变体,因此您应该比较小写和大写变体的FileInfo.Name属性,看它们是否确实相同.这不需要写入磁盘.
显然,如果卷上根本没有文件,这将失败.在这种情况下,只需回到第一个选项(参见Martin对实现的回答).
请记住,您可能有多个具有不同大小写规则的文件系统.例如,根文件系统可能区分大小写,但您可以在某处安装不区分大小写的文件系统(例如,带有FAT文件系统的USB记忆棒).因此,如果您进行此类检查,请确保将它们放在您要访问的目录中.
此外,如果用户将数据从区分大小写复制到不区分大小写的文件系统,该怎么办?如果您的文件仅按大小写不同,则其中一个文件将覆盖另一个文件,从而导致数据丢失.在向另一个方向复制时,您可能还会遇到问题,例如,如果文件A包含对文件"b"的引用,但该文件实际上名为"B".这适用于原始不区分大小写的文件系统,但不适用于区分大小写的系统.
因此,如果可以,我建议您避免依赖于文件系统是否区分大小写.不要生成仅根据大小写不同的文件名,使用标准文件选择器对话框,准备好案例可能会更改等.