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也会报错吧。我记得视频里面都是把目录先建好的
0
4
bennyhuo
是的,因为Java也是封了系统的API
2022-08-30
共4条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程