そのようなファイルがないのに、NSFileManager が fileExistsAtPath で TRUE を返すのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2455735

質問

NSFilemanager は、そのようなファイルがまだ存在しないはずのときに、次の場合に true を返します。何が起こっている?

    if([myManager fileExistsAtPath:[[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"]]){

NSLog(@"file is there");

}
役に立ちましたか?

解決

のドキュメント NSFileManager 推奨しているようです ない ファイルが存在するかどうかを確認し、代わりにファイルを読み取り、エラーを適切に処理しようとします(例: ファイルが見つかりません エラー)。あなたが説明していることは競合状態のようには聞こえませんが、ドキュメントの推奨事項が回避しようとしているのは競合状態です。しかし、ファイルが存在するかどうかを確認せずに、単にファイルをロードしようとした場合はどうなりますか?たとえば、次のことを試すことができます。

NSError *error;
NSStringEncoding encoding;
NSString *fileContents = [NSString stringWithContentsOfFile:fileName
                                               usedEncoding:&encoding
                                                      error:&error];

if (fileContents == nil)
{
    NSLog (@"%@", error);
}
else
{
    NSLog (@"%@", fileContents);
}

ファイルの内容をすべて含む文字列を取得した場合、ファイルは明らかにそこに存在します。エラーが発生した場合は、何か問題があります myManager.

他のヒント

これをプリントアウトし、それはあなたが期待するものであるかどうかを確認します。

NSLog(@"Directory: %@", [[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"]];

また、あなたがmyManager正しく定義されていることを確認します。

これは私のために期待どおりに動作ます。

 NSFileManager *myManager = [NSFileManager defaultManager];
NSString *documentsDirectory = NSHomeDirectory();

if([myManager fileExistsAtPath:[documentsDirectory stringByAppendingPathComponent:@"Music/songlist.txt"]]){

    NSLog(@"file is there");

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top