在我的应用程序中,我使用以下代码将图像/文件保存到应用程序的文档目录中:
-(void)saveImageDetailsToAppBundle{
NSData *imageData = UIImagePNGRepresentation(userSavedImage); //convert image into .png format.
NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it
NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",txtImageName.text]]; //add our image to the path
NSLog(fullPath);
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the image
NSLog(@"image saved");
}
但是,图像名称存在问题。如果文档目录中存在文件,则具有相同名称的新文件将覆盖旧文件。如何检查文件目录中是否存在文件名?
答案 0 :(得分:14)
使用NSFileManager
的{{3}}方法检查它是否存在。
if ( ![fileManager fileExistsAtPath:filePath] ) {
/* File doesn't exist. Save the image at the path */
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
} else {
/* File exists at path. Resolve and save */
}
答案 1 :(得分:6)
if ([[NSFileManager defaultManager] fileExistsAtPath:myFilePath])
答案 2 :(得分:5)
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"file name"];
if([fileManager fileExistsAtPath:writablePath]){
// file exist
}
else{
// file doesn't exist
}
答案 3 :(得分:2)
正如Apple文档所说,执行某些操作然后处理不存在文件比检查文件是否存在更好。
注意:建议不要尝试基于文件系统的当前状态或文件系统上的特定文件来预测行为。这样做可能会导致奇怪的行为或竞争条件。尝试执行操作(例如加载文件或创建目录),检查错误以及优雅地处理这些错误要比尝试提前判断操作是否成功要好得多。有关文件系统竞争条件的详细信息,请参阅“安全编码指南”中的“竞争条件和安全文件操作”。