【软件国产化】| 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:检查文件是否可执行。

代码示例:

cpp 复制代码
#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:检查文件是否可执行。

代码示例:

cpp 复制代码
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;
}
相关推荐
Molesidy26 分钟前
【VSCode】【Clangd】Win下的基于LLVM/Clangd+Clangd插件+MINGW+CMake的VSCode配置C/C++开发环境的详细教程
c++·ide·vscode·clangd·llvm
hhhh明1 小时前
quest2+alvr+steamvr
linux·windows·quest2
Mr_WangAndy2 小时前
C++_chapter13_C++并发与多线程_多线程概念,死锁,unique_lock(),lock_guard()使用
c++·lock·死锁·并发与多线程·unlock·lock_guard·unique_lock
小欣加油2 小时前
leetcode 946 验证栈序列
c++·算法·leetcode·职场和发展
dqsh062 小时前
树莓派5+Ubuntu24.04 LTS CH348 / CH9344 驱动安装 保姆级教程
linux·c语言·单片机·嵌入式硬件·iot
神仙别闹2 小时前
基于QT(C++) 实现哈夫曼压缩(多线程)
java·c++·qt
无敌最俊朗@3 小时前
C++ 并发与同步速查笔记(整理版)
开发语言·c++·算法
神仙别闹3 小时前
基于 C++和 Python 实现计算机视觉
c++·python·计算机视觉
奔跑吧邓邓子3 小时前
【C语言实战(80)】C语言实战:从复盘到进阶,解锁编程新高度
c语言·进阶·复盘·终篇
menge23333 小时前
Linux DNS域名解析服务器练习
linux·运维·服务器