0

フォルダとその内容をドキュメントディレクトリのサブディレクトリにコピーしようとしていますが、「操作を完了できませんでした。そのようなファイルまたはディレクトリはありません」というエラーで失敗します。

まず、次のようにドキュメントディレクトリにフォルダを作成しようとします。

NSString *diagramsDirectory = [docDirectory stringByAppendingPathComponent:@"Diagrams"];
if (![fileManager fileExistsAtPath:docDirectory isDirectory:&isDirectory] || !isDirectory)
{
    NSError *error = nil;
    NSDictionary *attr = [NSDictionary dictionaryWithObject:NSFileProtectionComplete
                                                     forKey:NSFileProtectionKey];
    [fileManager createDirectoryAtPath:diagramsDirectory
           withIntermediateDirectories:NO
                            attributes:attr
                                 error:&error];
    if (error) {
        NSLog(@"error creating dir. path: %@", [error localizedDescription]);
    }
}
NSLog(@"diagrams directory = %@", diagramsDirectory);

コンソールログは、これが機能することを示しているようです。

diagrams directory = /Users/../iPhone Simulator/../Library/Documentation/Diagrams

ただし、Macのディレクトリから「Diagrams」というフォルダをコピーしようとすると、次のようになります。

NSString *pathToDirectories = @"/User/Desktop/Project Resource Files/Files/";
NSError *error = nil;
NSArray *folders = [fileManager contentsOfDirectoryAtPath:pathToDirectories error:&error];   
for (NSString *folder in folders) {      
    if ([folder isEqualToString:@"Diagrams"]) {
        [self copyFolderAtPath:folder toDestinationFolderAtPath:docDirectory];            
    }

これは「copyFolderAtPath」メソッドを呼び出します。

- (BOOL)copyFolderAtPath:(NSString *)sourceFolder toDestinationFolderAtPath:(NSString *)destinationFolder
{
    destinationFolder = [destinationFolder stringByAppendingPathComponent:[sourceFolder lastPathComponent]];    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error = nil;

    // check for destination folder
    if ([fileManager fileExistsAtPath:destinationFolder])
    {
        if (![fileManager removeItemAtPath:destinationFolder error:&error])
        {
            NSLog(@"Could not remove old files. Error: %@", error);
            return NO;
        }
    }
    error = nil;
    // copy destination
    if (!([fileManager copyItemAtPath:sourceFolder toPath:destinationFolder error:&error])) {
        NSLog(@"failed copying file at path %@ to path %@. Error %@", sourceFolder, destinationFolder, error);
        return NO;
    }
    return YES;
}

「no」が返され、エラーが発生します。

誰かが私が間違っていることを知っていますか?

4

1 に答える 1

1

デバイス(したがってシミュレータ)はオペレーティングシステムから分離されているため、ファイルシステムのコピーを直接実行することはできません。シミュレーターから実行できる場合でも、アプリを実行している切断されたデバイスがOSファイルシステムにどのようにアクセスするかを想像してみてください。

ソケットを開くアプリケーションをMacに配置したり、デバイスのコピー元のMacにhttpエンドポイントを配置したりするなど、他のオプションを検討する必要があります。その他のオプションには、iCloudまたは別のクラウドサービスを介したドキュメントの同期が含まれます。iTunes経由でファイルを転送することもできます。他にもたくさんのオプションがあると思います...これもチェックしてください

于 2012-10-30T11:56:01.407 に答える