2009-07-15 13 views
8

私のResourcesフォルダからアプリケーションの "Documents"フォルダ内のフォルダにmp3ファイルをコピーしようとしています。シミュレータ上でこれは正常に動作します。しかし、私は、デバイス上でそれを実行すると、ファイルをコピーする私は、このエラーが発生しますiPhone - リソースからファイルにファイルをコピーするとエラーが発生する

Operation could not be completed. (Cocoa error 513.) 

ソースと宛先パスが細かいですが、私はまだ、ファイルをコピーすることはできません。何か案は?どこでココアエラーコード513が何を意味するのかを知ることができますか?

ありがとうございました。ここで

がmoveItemAtPathへの呼び出しを行う前に、関連するソースコード

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"Files"]; 

    NSString *insPath = [NSString stringWithFormat:@"%@.mp3", fileName]; 
    NSString *srcPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:insPath]; 
    NSString *destPath = [folderPath stringByAppendingPathComponent:insPath]; 
    NSLog(@"Src: %@, Dest: %@", srcPath, destPath); 

    NSError *err; 
    [fileManager moveItemAtPath:srcPath toPath:destPath error:&err]; 

    NSLog(@"Err desc-%@", [err localizedDescription]); 
    NSLog(@"Err reason-%@", [err localizedFailureReason]); 

だ、私はまた、「ファイル」ディレクトリを作成していますし、それは、YESを返します。

ここでログが

Src: /var/mobile/Applications/512D7565-7EF7-4C13-A015-19EEC3F3B465/MyApp.app/MyFile.mp3, Dest: /var/mobile/Applications/512D7565-7EF7-4C13-A015-19EEC3F3B465/Documents/Files/MyFile.mp3 

Err desc-Operation could not be completed. (Cocoa error 513.) 
Err reason-(null) 

を結果のDocumentsフォルダにリソースからデータをコピーするとき、質問

は、ファイルサイズに制限はありますか?私がコピーしようとしているファイルは約5MBです。それが理由だろうか?

+0

可能なdupの:http://stackoverflow.com/questions/912828/how-do-i-fix-cocoa-error-513 – notnoop

+0

すでに質問しました。そこの解決策は、私の問題 – lostInTransit

+0

の助けとならないかもしれませんが、ファイルをコピーするコードを含めることができれば助けになるかもしれません。 – notnoop

答えて

19

EDIT:

だけでも、簡単な解決策を考え出しました。 moveItemAtPath:toPath:error:の代わりに、copyItemAtPath:toPath:error:...を使用してください。本当にmainBundleからファイルをコピーし、移動しないからです。私はそれをすぐに考えていたはずです!

など。

[[NSFileManager defaultManager] copyItemAtPath:mainBundleFilePath 
             toPath:destPath 
             error:&err] 

この前のコメントを参照してください。


私はこの質問に答えていると思います。私は問題が確実に目的地のファイルパスではないと言うことができます。

私はかなり正確に同じコードと同じココアエラー513(NSFileWriteNoPermissionError)になっていた。

[[NSFileManager defaultManager] moveItemAtPath:mainBundleFilePath 
             toPath:destPath 
             error:&err] 

問題がmainBundleからのファイルは、適切な権限を持っていないことのように見えます別の場所に移動する。私はこのコマンドが実行された場合、実際にのファイルをメインバンドルかのコピーに移動するかどうかは分かりませんが、どちらの方法でも、ファイルマネージャはそのように思えません。

解決策は簡単です。mainBundleファイルをNSDataオブジェクトに読み込んでから、NSDataを新しいファイルに書き込みます。両方の例では、宛先ファイルのパスが同じであることに注意してください。これは、lostInTransitがファイルのパスがOKであるという点で正しいことを示しています。

この例では、その後、次のコードが動作しないエラーがスローされますが:

NSData *mainBundleFile = [NSData dataWithContentsOfFile:mainBundleFilePath]; 
[[NSFileManager defaultManager] createFileAtPath:destPath 
             contents:mainBundleFile 
             attributes:nil]; 

はところで、私自身のコードでは、代わりに属性のnilを渡すので:,私はNSDictionaryのを設定NSFileModificationDate属性。私はまた、if文を渡すエラーでcreateFileAtPath:contents:属性をラップしました。言い換えれば、

if (![[NSFileManager defaultManager] createFileAtPath:destPath 
              contents:mainBundleFile 
              attributes:myAttributes]) { 
// handle error as necessary, etc... 

}

それはとてもうまくいけば、このソリューションは、他の人に参考になる、このうちのすべてを把握するために私にしばらく時間がかかりました。

+0

ありがとうございました。長すぎるこの1つの上に立ち往生した! – lostInTransit

+1

元の問題は、ファイルを移動しようとすると、プログラムにリソースバンドルを変更するよう依頼することです(コピー後に削除することによって)。私は、iPhone上でリソースバンドルを変更することはできないと思っています(ただし、Simulator上にある可能性があります)。 –

+0

合意が成立したネヴァン。私にとって重要な部分は、NSFileWriteNoPermissionErrorが送信元ロケーション(リソースバンドル)に関してであり、宛先ロケーションに関してではないことを認識していました。また、このような状況では、パーミッションエラーによって移動タスクの両方の部分(コピーと削除)が防止されます。 –

3

ドキュメントフォルダへのパスが正しく設定されていますか?シミュレータの絶対パスはデバイスの絶対パスとは異なります。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

デバイス上documentsDirectoryのパスは次のようになり、何かのように:

の/ var /モバイル

はあなたがDocumentsディレクトリへの正しいパスを取得することを確認するために、次を使用する必要があります

/:/アプリケーション/ 30B51836-D2DD-43AA-BCB4-9D4DADFED6A2 /書類

シミュレータ上のパスは次のようなものになるだろうボリューム/スタッフ/ユーザ/ JOHNDOE /ライブラリ/ Application Support/iPhoneシミュレータ/ユーザ/アプリケーション/ 118086A0-FAAF-4CD4-9A0F-CD5E8D287270 /書類

あなたはdev siteにファイル&ネットワーキングページに詳細を読むことができます。 NSFileWriteNoPermissionError

+0

マイケルに感謝します。私はデバイス上で正しいパスを取得しています。これらのファイルを問題なくコピーしようとしている場所と同じフォルダから他のファイルにアクセスしているためです。質問を投稿する前にファイルとn/wページを通過しましたが、問題を解決するのに役立つものは見つかりませんでした。 – lostInTransit

2

http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html

はどういうわけか、あなたは間違ったパスを持っている、あなたがそこに記述させないことです。あなたはアプリを削除して、何らかの理由であなたのアプリドキュメントディレクトリが間違ったパーミッションに設定された場合に備えて、もう一度試してみることもできます...

私は、コピーをしているコード行を与え、その行に問題が何であるかを見ることができます。

+0

が質問のソースコードを追加しました。ありがとう – lostInTransit

+0

良いスタート、これまでのところOK - ログ結果(特にsrc:dst:行)を追加することができます –

+0

私は同様の問題があり、1時間デバッグしていましたが、私の問題を解決!ありがとう。 – nacho4d

関連する問題