当前位置:  开发笔记 > 运维 > 正文

如何确定文件系统在.net中是否区分大小写?

如何解决《如何确定文件系统在.net中是否区分大小写?》经验,为你挑选了3个好方法。

.net是否有办法确定本地文件系统是否区分大小写?



1> M4N..:

您可以在temp文件夹中创建一个文件(使用小写文件名),然后检查文件是否存在(使用大写文件名),例如:

string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower();
File.CreateText(file).Close();
bool isCaseInsensitive = File.Exists(file.ToUpper());
File.Delete(file);


你怎么知道临时文件夹在你希望找出区分大小写的文件系统中?
好答案.GUID创建的概率极小,不包含'abcdef'.它不太可能,但它可能会发生!

2> Tamas Czineg..:

.NET类库中没有这样的功能.

但是,您可以自己推出:尝试使用小写名称创建文件,然后尝试使用其名称的upparcase版本打开它.可能有可能改进这种方法,但你明白了.

编辑:您实际上只需要获取根目录中的第一个文件,然后检查filename.ToLower()和filename.ToUpper()是否都存在.不幸的是,很可能存在同一文件的大写和小写变体,因此您应该比较小写和大写变体的FileInfo.Name属性,看它们是否确实相同.这不需要写入磁盘.

显然,如果卷上根本没有文件,这将失败.在这种情况下,只需回到第一个选项(参见Martin对实现的回答).


这不会起作用,因为fileInfo.Name和fileInfo.FullName将保留发送到构造函数的大小写,它不会得到实际文件名的情况!!

3> oefe..:

请记住,您可能有多个具有不同大小写规则的文件系统.例如,根文件系统可能区分大小写,但您可以在某处安装不区分大小写的文件系统(例如,带有FAT文件系统的USB记忆棒).因此,如果您进行此类检查,请确保将它们放在您要访问的目录中.

此外,如果用户将数据从区分大小写复制到不区分大小写的文件系统,该怎么办?如果您的文件仅按大小写不同,则其中一个文件将覆盖另一个文件,从而导致数据丢失.在向另一个方向复制时,您可能还会遇到问题,例如,如果文件A包含对文件"b"的引用,但该文件实际上名为"B".这适用于原始不区分大小写的文件系统,但不适用于区分大小写的系统.

因此,如果可以,我建议您避免依赖于文件系统是否区分大小写.不要生成仅根据大小写不同的文件名,使用标准文件选择器对话框,准备好案例可能会更改等.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有