2012-01-10 6 views
5

fileExistsAtPathは存在するディレクトリに対してNOを返します。私は次のコードをお持ちの場合:ディレクトリはちょうどmoveItemAtURLで正常に作成されているにもかかわらずfileExistsAtPathは存在するディレクトリに対してNOを返します。

NSURL *newDirectoryPath = ... // path does not begin with a tilda 
           // and is created using URLByAppendingPathComponent:isDirectory: 

BOOL directoryExists = [self.fileManager fileExistsAtPath:[newDirectoryPath absoluteString]]; 
if (NO == directoryExists) 
{ 
    BOOL ret = [self.fileManager moveItemAtURL:self.currentPresentationDirectoryPath toURL:newDirectoryPath error: &err]; 
    // ret is YES, err is nil 

    directoryExists = [self.fileManager fileExistsAtPath:[newDirectoryPath absoluteString]]; 
} 

を、fileExistsAtPathはまだNOを返しています。

私は、ドキュメントが、これは言う知っている: ファイルシステムやファイルシステム上の特定のファイルの現在の状態に基づいて行動を述語しようと

が 推奨されません。そうすることで、ファイル システム競合状態の場合に、奇妙な動作が発生する可能性があります。

しかし、私は問題がここにあるかを理解したい - 私はアプリを閉じてから、上記のコードでfileExistsAtPathための最初のチェックはまだNO戻っていることを再起動した場合、ディレクトリが以前に成功時に作成されたにもかかわらず、コードの実行前に、オーガナイザのディレクトリを見ることができ、ディレクトリの内容などからも正常に読むことができます。

PS方法はありますか?fileExistsAtURL

+0

NSLogあなたが使用しているパスを確認し、それがあなたの考えであることを確認してください。 –

+0

このマシンでテストすることはできませんが、[newDirectoryPath absoluteString]ではなく[newDirectoryPath path]であるはずです。 –

+0

@ Joachim Isaksson - それはそれだった – Gruntcakes

答えて

19

NSURLがある場合、-absoluteURLNSFileManagerの使用可能なパスを返しません。接頭辞がfile://の絶対URLが返されます。例:file:///path/to/file

代わりに-pathのような他の方法を使用してみてください。それが機能するかどうか確認してください。

NSURL *myURL = /* some url */; 
NSString *myPath; 
BOOL exi; 

myPath = [myURL path]; 
exi = [[NSFileManager defaultManager] fileExistsAtPath:myPath]; 
if(!exi) { 
    NSLog(@"File does not exist"); 
} 
関連する問題