2012-01-10 29 views
5

fileExistsAtPath đang trả về NO cho một thư mục tồn tại. Nếu tôi có đoạn mã sau:fileExistsAtPath trả về NO cho một thư mục tồn tại

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]]; 
} 

Mặc dù thư mục vừa được tạo thành công với moveItemAtURL, fileExistsAtPath vẫn trở về NO.

Tôi biết các tài liệu nói điều này:

Cố gắng predicate hành vi dựa trên trạng thái hiện tại của hệ thống tập tin hoặc một tập tin cụ thể về hệ thống tập tin được không khuyến khích. Làm như vậy có thể gây ra hành vi kỳ quặc trong trường hợp các điều kiện chủng tộc của hệ thống là .

Nhưng tôi muốn hiểu những gì vấn đề là ở đây - nếu tôi đóng ứng dụng và khởi chạy lại nó sau đó kiểm tra đầu tiên cho fileExistsAtPath trong đoạn code trên vẫn trở về NO, mặc dù thư mục trước đây đã được tạo thành công trong trước khi thực thi mã, và tôi có thể xem thư mục trong Trình tổ chức và tôi cũng có thể đọc thành công từ nội dung của thư mục, v.v.

PS không có phương thức fileExistsAtURL:?

+0

NSĐăng nhập đường dẫn bạn đang sử dụng và đảm bảo đó là đường bạn nghĩ. –

+0

Không thể thử nghiệm trên máy này, nhưng không phải là nghĩa vụ phải [newDirectoryPath đường dẫn] thay vì [newDirectoryPath absoluteString]? –

+0

@Joachim Isaksson - đó là nó – Gruntcakes

Trả lời

19

Nếu bạn có NSURL, -absoluteURL sẽ không trả lại đường dẫn có thể sử dụng cho NSFileManager. Nó sẽ trả lại URL tuyệt đối với tiền tố file://. Ví dụ: file:///path/to/file.

Thay vào đó, hãy thử sử dụng một phương pháp khác, như -path. Kiểm tra xem có hiệu quả không.

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

myPath = [myURL path]; 
exi = [[NSFileManager defaultManager] fileExistsAtPath:myPath]; 
if(!exi) { 
    NSLog(@"File does not exist"); 
} 
Các vấn đề liên quan