用VS2008编译的时候遇到这样的提示:检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式

时间:2022-09-02 18:53:06
用VS2008编译的时候遇到这样的提示:检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式

在网上看了下处理方式,大家都说重新复制出来重新保存下就好了。但是目前问题是...我这里是个一个工程,几十个文件,如果这样弄。。我一会就晕了。。想问下有木有什么批量的方法?

7 个解决方案

#1


QQ粘贴的代码.

#2


。。。这是之前别人提交的代码。。不是QQ....
引用 1 楼 qq120848369 的回复:
QQ粘贴的代码.

#3


我百度了一下, linux下有mac2unix这个工具, 写一个脚本是可以处理的.

#4


谢谢了,我是windows下的,请问有什么好办法么?这个工程在VC6.0下是可以正常用的,不过现在习惯2008了,回到VC6总觉得不习惯。

引用 3 楼 qq120848369 的回复:
我百度了一下, linux下有mac2unix这个工具, 写一个脚本是可以处理的.

#5


这个一般是编码不一致造成的,我遇到过,但是单个文件代码量比较小,删除换行符合所有空格,重新格式化代码就好了。

#6


Unix/Linux换行符是'\n'
Windows换行符是'\r\n'
Mac换行符是'\r'
编个小程序比如Mac2Unix.c将命令行给出的文件中所有'\r'替换为'\n',然后利用批处理的for语句处理指定目录下所有文件即可。
Mac2Unix.c
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: Mac2Unix filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
            if (EOF==c2) break;
        }
    }
    fclose(f);
    return 0;
}

比如在cmd窗口里面输入以下命令,可以用c:\mydir\Mac2Unix.exe处理所有c:\tmp\目录下及其所有子目录下的*.c文件
for /f %f in ('dir /a-d /b /s c:\tmp\*.c') do c:\mydir\Mac2Unix.exe %f

#7


上帖中代码略改
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: Mac2Unix filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if (EOF==c2) {
                fseek(f,-1L,SEEK_CUR);
                fputc('\n',f);
                break;
            }
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
        }
    }
    fclose(f);
    return 0;
}

#1


QQ粘贴的代码.

#2


。。。这是之前别人提交的代码。。不是QQ....
引用 1 楼 qq120848369 的回复:
QQ粘贴的代码.

#3


我百度了一下, linux下有mac2unix这个工具, 写一个脚本是可以处理的.

#4


谢谢了,我是windows下的,请问有什么好办法么?这个工程在VC6.0下是可以正常用的,不过现在习惯2008了,回到VC6总觉得不习惯。

引用 3 楼 qq120848369 的回复:
我百度了一下, linux下有mac2unix这个工具, 写一个脚本是可以处理的.

#5


这个一般是编码不一致造成的,我遇到过,但是单个文件代码量比较小,删除换行符合所有空格,重新格式化代码就好了。

#6


Unix/Linux换行符是'\n'
Windows换行符是'\r\n'
Mac换行符是'\r'
编个小程序比如Mac2Unix.c将命令行给出的文件中所有'\r'替换为'\n',然后利用批处理的for语句处理指定目录下所有文件即可。
Mac2Unix.c
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: Mac2Unix filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
            if (EOF==c2) break;
        }
    }
    fclose(f);
    return 0;
}

比如在cmd窗口里面输入以下命令,可以用c:\mydir\Mac2Unix.exe处理所有c:\tmp\目录下及其所有子目录下的*.c文件
for /f %f in ('dir /a-d /b /s c:\tmp\*.c') do c:\mydir\Mac2Unix.exe %f

#7


上帖中代码略改
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: Mac2Unix filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if (EOF==c2) {
                fseek(f,-1L,SEEK_CUR);
                fputc('\n',f);
                break;
            }
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
        }
    }
    fclose(f);
    return 0;
}