FSCopyObjectAsyncは OS X v10.8 で非推奨になりました。ファイル コピー操作の進行状況インジケーターを表示する方法を説明します。
4 に答える
copyfile (3)は FSCopyObjectAsync の代替です。これは、Progress Callback を使用した copyfile(3) の例です。
私の答えは、コピーされている単一のファイルの進行状況を表示することについて話していることを前提としています。
はい、「FSCopyObjectAsync
」は廃止されましたが、まだなくなっていません。
お気づきのように、Apple は、最終的に削除される機能の有用な代替品をまだ提供していません。おそらく 10.9 で新しい機能が導入されたとき、NSFileManagerDelegate
デリゲートが利用できるように " " プロトコルで提供されるのではないかと思います (ただし、確かなことはわかりません)。
それを確実にするために、Apple はこれを必要とする多くの開発者がいることを認識しておく必要があります。http://bugreporter.apple.comでバグ レポートを提出してください。重複としてクローズされる可能性がありますが、すべての投票が重要です。
この問題に対処するオープン ソース プロジェクトを作成しました。コピー ファイル(3)を NSOperation にラップし、そのための GUI を作成しました。チェックして、より良いものにするために貢献してください。
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);
}