Mac os 环境差异汇总(更新到 11-6),11-6 data_copy 创建踩坑及 errno 处理细节
来源:11-6 案例:复制文件-2

慕移动4574462
2022-08-30
Mac os 环境差异汇总(更新到 11-6)
宽字符 (9-10)
mac 宽字符 wprintf 用 %S 才能正常打印, 用 %s 打印如果没有正确 setlocale 会打印乱码�, setlocale 正确的话会打印 `O.
locale
其实 mac 默认就是 utf-8 不用 setlocale. 因格式问题未正确设置时会出现上面的特殊情况.
mac 中文 UTF-8 表示的格式略有不同 : zh_CN.UTF-8
window : zh_CN.utf8
可通过 locale -a 命令查看所有支持的编码
11-6文件复制目标文件夹 data_copy 踩坑
11章的 4, 6, 9 小节中, 必须要手动创建 data_copy 目录.fopen data_copy 文件夹不存在时报错 no such file found.
(这个不是 mac 平台特有问题, win 平台不创建也会报错; 也不是 C 语言特有问题, 是文件系统的要求, Java Python 也是一样)
附上判断文件夹是否存在并创建的代码片段
FILE *dest_dir = fopen("data_copy", "r");
if(dest_dir){
puts("exist");
fclose(dest_dir);
} else{
PRINT_IF_ERROR("access dest: %s", "data_copy");
mkdir("data_copy", 0700);
puts("don't exist");
}
// 第二种方法
if (access("data_copy",0) ){
PRINT_IF_ERROR("access dest: %s", "data_copy");
puts("DOESN'T EXISIT!");
mkdir("data_copy",0700);
}else{
puts("exist");
}
errno 处理细节
- errno 进程全局保存, 最好在 result 明确出错时打印, 避免误解前面代码积累的错误
for (int i = 0; i < 2; ++i) {
TimeCost(NULL);
int result = CopyFile(srcs[i], dest[i]);
TimeCost(srcs[i]);
//---
if(result){
printf("result copy: %s result %d \n",srcs[i], result);
PRINT_IF_ERROR("CopyFile: %s", srcs[i]);
}
}
写回答
1回答
-
bennyhuo
2022-08-30
赞。目录不存在win也会报错吧。我记得视频里面都是把目录先建好的042022-08-30
相似问题