【软件国产化】| Windows和Linux下文件名后缀是否区分大小写
今天在开发过程中遇到了个软件在Linux系统和Windows系统下功能表现不一致的bug,具体表现为:
插入一张图片(A文件夹中的001.jpg),然后使用“图片替换”功能,用B文件夹中的图片(B文件夹中的001.JPG)进行同名替换,在Windows系统下,图片替换成功;而在Linux系统下,相同的操作,版面上的图片提示“缺图”。
最后排查到的原因是:
这是由Linux和Windows的系统差异造成的:在Windows系统下,文件的后缀名是不区分大小写的;在Linux系统下,文件的后缀名是严格区分大小写的。
简单来说就是:Linux系统下,1.JPG和1.jpg是两张不同的图片,它们可以同时出现在同一个文件夹下,而Windows系统下这种情况是绝对不会发生的。
在这里附上windows和linux下用来判断文件是否存在的方法。
1.Windows系统: _waccess 函数
函数 | 功能 |
---|---|
int _waccess(const wchar_t* filename, int mode); | 用于文件或目录是否存在、检查文件或目录的访问权限 |
参数说明:
• filename:要检查的文件或目录的路径。
• mode:要检查的访问模式,可以是以下值之一:
F_OK:检查文件是否存在。
R_OK:检查文件是否可读。
W_OK:检查文件是否可写。
X_OK:检查文件是否可执行。
代码示例:
#include <stdio.h>
#include <io.h>
int main()
{
// 测试文件是否存在
const wchar_t* filename = L"D:\\MyApp.ini";
// 第二个参数 mode = 0,表示不指定任何访问权限
if (_waccess(filename, 0) != 0)
{
fprintf(stderr, "File does not exist.\n");
return 1;
}
printf("File exists.\n");
return 0;
}
2.Linux系统:_access函数
函数 | 功能 |
---|---|
int _access( const char *filename, int mode ); | 用于文件或目录是否存在、检查文件或目录的访问权限 |
参数说明:
• filename:要检查的文件或目录的路径。
• mode:要检查的访问模式,可以是以下值之一
F_OK:检查文件是否存在。
R_OK:检查文件是否可读。
W_OK:检查文件是否可写。
X_OK:检查文件是否可执行。
代码示例:
int main()
{
const char* filename = "D:\\MyApp.ini";
// 检查文件是否存在
if (_access(filename, 0) == 0) {
printf("File exists\n");
}
else {
printf("File does not exist\n");
}
return 0;
}