如何检查文件夹中是否存在文件?

我有一个应用程序内购买的应用程序,当用户买东西,下载一个HTML文件到我的应用程序的文档文件夹。

现在我必须检查这个HTML文件是否存在,所以如果是true,加载这个HTML文件,否则加载我的默认html页面。

我怎么能做到这一点? 使用NSFileManager我不能得到mainBundle之外..

Swift 3:

 let documentsURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 

…为您提供文档目录的文件URL。 以下检查是否有一个名为foo.html的文件:

 let fooURL = documentsURL.appendingPathComponent("foo.html") let fileExists = FileManager().fileExists(atPath: fooURL.path) 

Objective-C的:

 NSString* documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString* foofile = [documentsPath stringByAppendingPathComponent:@"foo.html"]; BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile]; 

Applebuild议不要依赖fileExistAtPath:方法。 如果文件不存在,试图打开文件并处理错误通常会更好。

NSFileManager类参考

注:不build议尝试基于文件系统的当前状态或文件系统上的特定文件来判断行为。 这样做会造成奇怪的行为或竞赛状况。 尝试一个操作(例如加载文件或创build一个目录),检查错误并处理这些错误要比试图提前弄清楚操作是否成功要好得多。 有关文件系统争用条件的更多信息,请参阅安全代码指南中的“争用条件和安全文件操作”。

来源: Apple开发者API参考

从安全编码指南。

为了防止这种情况,程序经常检查以确保具有特定名称的临时文件在目标目录中不存在。 如果这样的文件存在,应用程序将删除它或为临时文件select一个新名称以避免冲突。 如果文件不存在,应用程序将打开文件进行写入,因为打开文件进行写入的系统例程自动创build一个新文件(如果不存在)。 攻击者通过持续运行一个程序来创build一个具有合适名称的新的临时文件,可以(稍微持久一些,运气好的话)在应用程序检查时确保临时文件不存在当它打开写作。 然后应用程序打开攻击者的文件并写入它(记住,系统例程打开一个现有的文件,如果有的话,只有当没有现有文件时才创build一个新文件)。 攻击者的文件可能具有与应用程序的临时文件不同的访问权限,攻击者可以读取这些内容。 或者,攻击者可能已经打开文件。 攻击者可以使用硬链接或者其他文件(攻击者拥有的文件或现有的系统文件)的一个硬链接或符号链接来replace该文件。 例如,攻击者可以通过与系统密码文件的符号链接replace该文件,以便在攻击之后,系统密码被破坏到包括系统pipe理员在内的任何人都无法login。

如果您对文件系统进行了不同的设置,或者寻找不同的方法来设置文件系统,然后检查文件夹中是否存在文件,那么可以使用另一个示例。 也显示dynamic检查

 for (int i = 0; i < numberHere; ++i){ NSFileManager* fileMgr = [NSFileManager defaultManager]; NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString* imageName = [NSString stringWithFormat:@"image-%@.png", i]; NSString* currentFile = [documentsDirectory stringByAppendingPathComponent:imageName]; BOOL fileExists = [fileMgr fileExistsAtPath:currentFile]; if (fileExists == NO){ cout << "DOESNT Exist!" << endl; } else { cout << "DOES Exist!" << endl; } } 

检查文件/ catchimagepath中是否存在文件:

 NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; NSString *tempName = [NSString stringWithFormat:@"%@/catchimage/%@.png",stringPath,@"file name"]; NSLog(@"%@",temName); if([[NSFileManager defaultManager] fileExistsAtPath:temName]){ // ur code here } else { // ur code here** } 

Swift 2.0

这是如何检查文件是否存在使用Swift

 func isFileExistsInDirectory() -> Bool { let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) let documentsDirectory: AnyObject = paths[0] let dataPath = documentsDirectory.stringByAppendingPathComponent("/YourFileName") return NSFileManager.defaultManager().fileExistsAtPath(dataPath) }