そのようなファイルがないのに、NSFileManager が fileExistsAtPath で TRUE を返すのはなぜですか?
-
20-09-2019 - |
質問
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");
}
所属していません StackOverflow