看起来这个问题非常简单,但我无法找到在没有平台依赖性的情况下在C中复制文件的明确解决方案.
我在我的开源项目中使用了一个system()调用来创建目录,复制文件和运行外部程序.它在Mac OS X和其他Unix-ish系统中运行良好,但在Windows上失败.问题是:
system( "cp a.txt destination/b.txt" );
Run Code Online (Sandbox Code Playgroud)
如何编写没有依赖的复制代码?
(其实,我写的宏来解决这个问题,但它是不冷静.http://code.google.com/p/npk/source/browse/trunk/npk/cli/tests/testutil.h,L22-56)
这个system()功能比它的价值要麻烦得多; 它在一个单独的进程中调用shell,通常应该避免.
相反,fopen() a.txt与dest/b.text和使用getc()/ putc()做复制(因为标准库更容易做页对齐的缓冲比你)
FILE *src = fopen("a.txt", "rb");
FILE *dst = fopen("dest/b.txt", "wb");
int i;
for (i = getc(src); i != EOF; i = getc(src))
{
putc(i, dst);
}
fclose(dst);
fclose(src);
Run Code Online (Sandbox Code Playgroud)
您需要在stdio.h中使用C标准库函数.
特别是fopen,fread,fwrite,和fclose就足够了.
一定要b在标志中包含("二进制")选项fopen.
[编辑]
不幸的是,文件名本身(正斜杠与反斜杠)仍然依赖于平台.所以你需要某种#ifdef或类似的来处理它.
或者您可以使用跨平台工具包.