1

AFNetworkingでファイルをダウンロードした後、ファイルを見つけるのに問題があります...ダウンロード自体はうまくいきますが、後でファイルの存在を確認すると、ファイルが見つかりません...だから私は望んでいます誰かが私を助けることができます...

私のコードでは、ファイルをダウンロードし、完了ブロックで存在を確認します (これは、ファイルを見つけるのに問題があるため、後で削除されます)...

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"url to file removed"]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"filename removed"];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:@"filename removed" append:NO];

//Track the progress
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead)
{
    if (totalBytesExpectedToRead > 0)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString *progress = [NSString stringWithFormat:@"Downloaded %lld of %lld bytes",
                               totalBytesRead,
                               totalBytesExpectedToRead];

            NSLog(@"%@", progress);
        });
    }
}];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSLog(@"File downloaded to %@", path);

    //Check for existence
    NSFileManager *filemgr = [NSFileManager defaultManager];

    if([filemgr fileExistsAtPath:path])
    {
        NSLog(@"File found");
    } else
    {
        NSLog(@"File not found");
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
    NSLog(@"Error: %@", error);
}];

[operation start];

うまくいかない可能性のあるアイデアはありますか?ダウンロード自体はうまくいくので、問題はiOSのファイル/ファイルシステムの保存にあるはずです...

4

1 に答える 1

5

Does the directory you're trying to write to exist? If not you may find [NSOutputStream outputStreamToFileAtPath:@"filename removed" append:NO] is returning nil.

Try creating the directory first:

NSFileManager *fm = [NSFileManager defaultManager];
NSString *folder = [@"filename removed" stringByDeletingLastPathComponent];
if (![fm fileExistsAtPath:folder]) {
    [fm createDirectoryAtPath:folder
  withIntermediateDirectories:YES
                   attributes:nil
                        error:nil];
}

I hope that helps.

于 2013-03-04T15:37:32.440 に答える