FSCopyObjectAsync在OS X v10.8中已不推荐使用,现在如何显示文件复制操作的进度指示器。
答案 0 :(得分:2)
我的回答是假设您正在讨论复制单个文件的进度。
是的,“FSCopyObjectAsync
”已被弃用,但尚未消失。
正如您所发现的那样,Apple还没有为最终将被删除的功能提供有用的替代品。我怀疑(但不确定)当新功能出现时,可能是10.9,它将以“NSFileManagerDelegate
”协议提供给代表使用。
为了确保这一点,Apple需要意识到有很多开发人员需要这个。在http://bugreporter.apple.com提交错误报告 - 它可能会被重复关闭,但每次投票都很重要。
答案 1 :(得分:2)
copyfile(3)是FSCopyObjectAsync的替代方案。 Here是带有Progress Callback的copyfile(3)的示例。
答案 2 :(得分:0)
使用C
中的进度指示器复制文件#define BUFSIZE (64*1024)
void *thread_proc(void *arg);
{
//outPath & inPatn an NSString paths
char buffer[BUFSIZE];
const char * outputFile = [outPath UTF8String];
const char * inputFile = [inPath UTF8String];
int in = open(inputFile, O_RDONLY);
int out = open(outputFile, O_WRONLY | O_CREAT | O_TRUNC);
vvolatile off_t progress;
progress = 0;
ssize_t bytes_read;
double fileSize = 0;
NSNumber * theSize;
if ([inPath getResourceValue:&theSize forKey:NSURLFileSizeKey error:nil])
fileSize = [theSize doubleValue];
[progressIndicator setMaxValue:fileSize];
while((bytes_read = read(in, buffer, BUFSIZE)) > 0)
{
write(out, buffer, BUFSIZE);
progress += bytes_read;
[progressIndicator setDoubleValue:progress];
}
// copy is done, or an error occurred
close(in);
close(out);
}
答案 3 :(得分:0)
我创建了一个解决这个问题的开源项目,我在NSOperation上包装了复制文件(3)并为它创建了一个gui,请检查它,并可能有助于使它更好。
https://github.com/larod/FileCopyDemo