FSCopyObjectAsync在 OS X v10.8 中已弃用,现在如何显示文件复制操作的进度指示器。
问问题
1966 次
4 回答
2
我的回答假设您正在谈论显示正在复制的单个文件的进度。
是的," FSCopyObjectAsync
" 已被弃用,但它还没有消失。
正如您所发现的,Apple 尚未为最终将被删除的功能提供有用的替代品。我怀疑(但不确定)当新功能出现时,也许对于 10.9,它将在“ NSFileManagerDelegate
”协议中提供给代表使用。
为了确定这一点,Apple 需要意识到有很多开发人员需要这个。在http://bugreporter.apple.com上提交错误报告——它可能会作为副本被关闭,但每一票都很重要。
于 2012-10-03T09:37:04.897 回答
2
copyfile(3)是 FSCopyObjectAsync 的替代方法。这是带有进度回调的 copyfile(3) 示例。
于 2013-04-09T12:31:30.680 回答
1
我创建了一个开源项目来解决这个问题,我在 NSOperation 上包装了副本文件(3)并为它创建了一个 gui,请检查它并可能有助于使它变得更好。
于 2015-04-21T12:39:56.610 回答
0
在 C 中使用 progressIndicator 处理文件
#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);
}
于 2013-04-22T18:07:09.643 回答