1

FSCopyObjectAsync在 OS X v10.8 中已弃用,现在如何显示文件复制操作的进度指示器。

4

4 回答 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,请检查它并可能有助于使它变得更好。

https://github.com/larod/FileCopyDemo

在此处输入图像描述

于 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 回答