看起来这个问题非常简单,但我无法找到在没有平台依赖的情况下在C中复制文件的明确解决方案。
我在我的开源项目中使用了一个system()调用来创建目录,复制文件和运行外部程序。它在Mac OS X和其他Unix-ish系统中运行良好,但在Windows上失败。问题是:
system( "cp a.txt destination/b.txt" );
如何编写没有依赖的复制代码?
(实际上,我写了一些宏来解决这个问题,但这并不酷。http://code.google.com/p/npk/source/browse/trunk/npk/cli/tests/testutil.h,L22-56)
答案 0 :(得分:9)
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);
答案 1 :(得分:6)
您需要使用stdio.h中的C标准库函数。
特别是fopen
,fread
,fwrite
和fclose
就足够了。
请务必在b
的标记中加入fopen
(“二进制”)选项。
[编辑]
不幸的是,文件名本身(正斜杠与反斜杠)仍然依赖于平台。所以你需要某种#ifdef
或类似的来处理它。
或者您可以使用cross-platform toolkit。
答案 2 :(得分:0)
使用标准C库stdio.h
。首先打开输入文件,使用fopen(inputFilename, "rb")
进行阅读,打开输出文件,使用fopen(outputFilename, "wb")
进行书写,使用fread
和fwrire
复制内容。然后使用fclose
关闭这两个文件。