跨平台开发有一个众所周知,但因为只是偶尔受到困扰,一般人不会在意的问题,就是windows对文件名大小写不敏感,而其他平台对文件名大小写敏感。因此可能出现在windows平台开发时一切正常,但部署/打包到其他平台下,运行时加载文件会失败。我对于这种问题也是不甚在意的,一般都是打包/部署时把所有文件转小写保存,加载文件时也把文件名转小写。不采取这种方法,一般公司也都有制定流程,可以避免出现此类问题。

但再好的流程也是需要人执行的,如果执行不到位,比如美术上传资源不按规范,或者策划填表不按规范,就会出问题了。所以有前同事问我有没有检测的方法,我就尝试了一下。

首先我想到的是FileInfo的Name属性,一看就是干这事的,但是真正使用时发现,如果你以小写的名字创建FileInfo,那么创建的FileInfo的Name属性也是小写的名字,并不是实际的名字。然后我就想到了逐级遍历文件夹,总是可以区分大小写,找到是否匹配的。于是经过几番测试,解决了该问题,最终代码如下:

public static class Tools
{
public static bool IsCaseMatch(string path)
{
path = path.Replace('\\', '/');
string[] pathes = path.Split('/');
DirectoryInfo dir = new DirectoryInfo(".");
for (int i = ; i < pathes.Length - ; i++)
{
DirectoryInfo[] dirs = dir.GetDirectories(pathes[i]);
if (dirs.Length == )
return false;
DirectoryInfo dir2 = null;
for (int j = ; j < dirs.Length; j++)
{
if (dirs[j].Name == pathes[i])
{
dir2 = dirs[j];
break;
}
}
if (dir2 == null)
return false;
dir = dir2;
}
FileInfo[] files = dir.GetFiles(pathes[pathes.Length - ]);
if (files.Length == )
return false;
for (int i = ; i < files.Length; i++)
{
if (files[i].Name == pathes[pathes.Length - ])
return true;
}
return false;
}
}

目前版本只能检测相对路径,不能检测绝对路径(实际工程加载自带资源一般也不会使用绝对路径)

Windows下检测文件名大小写是否匹配的更多相关文章

  1. windows下git识别大小写配置

    默认情况下windows上的Git客户端,在文件名仅发生大小写改变时不会识别,提交后发现,gitlab上的文件名不会发生变化. 解决方法: 编辑 .git 中的config文件, 将 ignoreca ...

  2. fastjson简单使用demo,@JSONField注解属性字段上与set、get方法上。实体类toString(),实体类转json的区别;_下划线-减号大小写智能匹配

    一.demo代码 @JSONField注解属性字段上与set.get方法上.使用@Data注解(lombok插件安装最下方),对属性“笔名”[pseudonym]手动重写setter/getter方法 ...

  3. linux,windows下检测指定的IP地址是否可用或者检测IP地址冲突的3种方式(批处理程序,python程序,linux shell 批量ping)

    本文中的脚本适用范围: 1)检测某些IP地址是否被占用: 2)检测网络中某些设备是否存活: 3)在分配新的ip地址之前,批量检测环境中是否存在冲突的机器 以上检测基于ICMP Ping报文,要求所有的 ...

  4. 分享一个windows下检测硬件信息的bat脚本

    文件名必须以.bat结尾,如果出现闪退,请右击鼠标,以管理身份运行即可 @echo offcolor 0atitle 硬件检测 mode con cols=90sc config winmgmt st ...

  5. mysql57 在windows 下无法修改 大小写设置

    参考: https://blog.csdn.net/ceciliawanghenan/article/details/82916662 清空data文件,我的data文件在programdata\My ...

  6. windows下Mysql5.7表名不区分大小写问题

    前言 Windwos文件系统本身是不区分大小写的,但是Linux文件系统是支持大小写的.于是安装在Linux下的Mysql导出到windows下可能因为大小写问题导致错误,因此要开启window下My ...

  7. 在windows 、linux下读取目录下所有文件名

    Windows要引入的头文件是<Windows.h> 主要是两个函数FindFirstFile.FindNextFile MSDN里是这么说的: FindFirstFile functio ...

  8. 让Windows中的文件名支持大小写

    背景 最近在Linux官网下载了Linux内核,下载下来的是一个后缀为.tar.xz的压缩包,于是在毫不知情的情况下随随便便解压了,解压过程中出现了很多问题. 其中一个问题就是在Windows下,不区 ...

  9. Windows下C/C++内存泄露检测机制

    1.概述 在Windows下微软给我们提供了一个十分强大的C/C++运行时库,这个运行时库中包含了很多有用的功能.而众多强大功能之一就是内存泄露的检测. C/C++提供了强大的内存管理功能,不过随之而 ...

随机推荐

  1. angular : ngModel 内部流程

    angular 1.5 beta link NgModelController provides API for the ngModel directive. The controller conta ...

  2. Java学习——用户界面的布局

    使用布局管理器 FlowLayout管理器 面板的默认布局管理器是java.awt包中的FlowLayout类.使用FlowLayout时,像在页面中排列英文单词那样排组件:从左到右排列,当前行没有空 ...

  3. 每日java基础知识(01)

    1.java语言的主要特点. 跨平台性:一个应用可以不经过修改,就直接在不同的平台上运行. 面向对象:java是面向对象的语言,可以使用对象封装事物的属性和行为,可以使用面向对象的思想进行分析设计,并 ...

  4. JavaScript基础——变量、语句、注释

    一.变量的命名规则 1.变量名由数字.字母.下划线组成 2.变量名的首字母不能是数字,只能是字母或者下划线 3.不能使用关键字和保留字作为变量名 4.变量严格区分大小写,例如在JavaScript中o ...

  5. Oracle主键异常处理

    Hibernate: insert into test1.WarnWeather (WAREA, wdate, WDAYS, WINFO, WTYPE, WNO) values (?, ?, ?, ? ...

  6. Django之admin

    django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后, 就可以对数据进行增删改查,而使用django admin ...

  7. 循环单词 java

    链接:https://www.nowcoder.com/questionTerminal/9d5fbe7750a34d0b91c73943f93b2d7d来源:牛客网如果一个单词通过循环右移获得的单词 ...

  8. 使用RecyclerView实现的分组列表。

    项目介绍: StickyHeaders使用RecyclerView实现的分组列表

  9. jump堡垒机配置使用

    一.用户管理 1)添加用户 点击用户管理 —> 查看用户 —> 添加用户 输入要添加的用户名,姓名,权限,Mail,并且发送邮件 —> 保存 查看添加的用户 查看用户邮件 邮件中包含 ...

  10. spring或springmvc自动生成applicationcontext.xml或springmvc文件(此文转载和借鉴多篇文章)

    在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...