请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Mac os 环境差异汇总(更新到 11-6),11-6 data_copy 创建踩坑及 errno 处理细节

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]);
    }
  }

正在回答 回答被采纳积分+3

1回答

bennyhuo 2022-08-30 18:30:16
赞。目录不存在win也会报错吧。我记得视频里面都是把目录先建好的
0 回复 有任何疑惑可以回复我~
  • 提问者 慕移动4574462 #1
    刚回去看了下视频, 视频里是之前就创建好的.
    应该是之前的11-4小节里是手动新建的, 下载的工程示例里没有自带data_copy 目录. 看视频的时候没注意, 没有创建也没运行 11-4. 
    踩了坑也好, 长知识了哈.
    回复 有任何疑惑可以回复我~ 2022-08-30 18:56:38
  • 哈哈,文件系统都是这样的
    回复 有任何疑惑可以回复我~ 2022-08-30 19:13:19
  • 提问者 慕移动4574462 回复 bennyhuo #3
    我说怎么感觉 java 以前也踩过类似的坑呢, 基本功都忘了哈哈
    回复 有任何疑惑可以回复我~ 2022-08-30 19:21:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信