在我的应用程序中创建一个目录来存储不同类型的文件

时间:2016-11-28 06:30:07

标签: ios objective-c save nsdocumentdirectory

我想将用户文件存储在路径目录下的文件夹中。如何存储文件并在需要时进行检索?感谢

3 个答案:

答案 0 :(得分:1)

你可以管理,

   NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];

NSString *documentsDirectoryForSaveImages = [docsDir stringByAppendingPathComponent:@"/ProfileImages"];

// this will create "ProfileImages" directory in document directory

[[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectoryForSaveImages withIntermediateDirectories:YES attributes:nil error:nil];

NSString *profilePicturePath = [documentsDirectoryForSaveImages stringByAppendingPathComponent:@"profilePicture"];

现在假设您要保存image然后转换数据,您可以在路径中写入

    NSData *data = UIImageJPEGRepresentation(yourImage, 1.0);

    [data writeToFile:profilePicturePath atomically:NO];

您可以使用或检索此图像,

    self.imageViewProfile.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:profilePicturePath]];   // here "imageViewProfile" is UIImageView!

同样,您可以通过将其转换为目录中的NSData来存储不同类型的文件!

答案 1 :(得分:1)

#pragma mark -- list all the files exists in Document Folder in our Sandbox.
// Fetch directory path of document for local application.
- (void)listAllLocalFiles{

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsDirectory = [paths objectAtIndex:0];

     NSFileManager *manager = [NSFileManager defaultManager];
     // This function will return all of the files' Name as an array of NSString.
     NSArray *files = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
    // Log the Path of document directory.
    NSLog(@"Directory: %@", documentsDirectory);
// For each file, log the name of it.
    for (NSString *file in files) {
         NSLog(@"File at: %@", file);
    }
}

#pragma mark -- Create a File in the Document Folder.
 - (void)createFileWithName:(NSString *)fileName{
       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
       NSString *documentsDirectory = [paths objectAtIndex:0];
       NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

       NSFileManager *manager = [NSFileManager defaultManager];
       // 1st, This funcion could allow you to create a file with initial contents.
       // 2nd, You could specify the attributes of values for the owner, group, and permissions.
       // Here we use nil, which means we use default values for these attibutes.
       // 3rd, it will return YES if NSFileManager create it successfully or it exists already.
       if ([manager createFileAtPath:filePath contents:nil attributes:nil]) {
              NSLog(@"Created the File Successfully.");
       } else {
              NSLog(@"Failed to Create the File");
       }
}


#pragma mark -- Delete a File in the Document Folder.
 - (void)deleteFileWithName:(NSString *)fileName{
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *documentsDirectory = [paths objectAtIndex:0];
      // Have the absolute path of file named fileName by joining the document path with fileName, separated by path separator.
      NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

      NSFileManager *manager = [NSFileManager defaultManager];
      // Need to check if the to be deleted file exists.
      if ([manager fileExistsAtPath:filePath]) {
            NSError *error = nil;
            // This function also returnsYES if the item was removed successfully or if path was nil.
            // Returns NO if an error occurred.
            [manager removeItemAtPath:filePath error:&error];
            if (error) {
                   NSLog(@"There is an Error: %@", error);
            }
       } else {
            NSLog(@"File %@ doesn't exists", fileName);
       }
  }

  #pragma mark -- Rename a File in the Document Folder.
  - (void)renameFileWithName:(NSString *)srcName toName:(NSString *)dstName{
          NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
         NSString *documentsDirectory = [paths objectAtIndex:0];
         NSString *filePathSrc = [documentsDirectory stringByAppendingPathComponent:srcName];
         NSString *filePathDst = [documentsDirectory stringByAppendingPathComponent:dstName];
         NSFileManager *manager = [NSFileManager defaultManager];
               if ([manager fileExistsAtPath:filePathSrc]) {
                    NSError *error = nil;
                    [manager moveItemAtPath:filePathSrc toPath:filePathDst error:&error];
                    if (error) {
                         NSLog(@"There is an Error: %@", error);
                    }
              } else {
                   NSLog(@"File %@ doesn't exists", srcName);
            }
     }

#pragma mark -- Read a File in the Document Folder.
   /* This function read content from the file named fileName.
   */
- (void)readFileWithName:(NSString *)fileName{
         // Fetch directory path of document for local application.
         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
         NSString *documentsDirectory = [paths objectAtIndex:0];
         // Have the absolute path of file named fileName by joining the document path with fileName, separated by path separator.
         NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

         // NSFileManager is the manager organize all the files on device.
         NSFileManager *manager = [NSFileManager defaultManager];
         if ([manager fileExistsAtPath:filePath]) {
               // Start to Read.
               NSError *error = nil;
               NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSStringEncodingConversionAllowLossy error:&error];
               NSLog(@"File Content: %@", content);

               if (error) {
                     NSLog(@"There is an Error: %@", error);
               }
          } else {
                 NSLog(@"File %@ doesn't exists", fileName);
           }
    }

答案 2 :(得分:1)

创建文件夹并保存文件:

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [docsDirectory stringByAppendingPathComponent:@"/MyDirectory"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Creating folder
}
NSString *filePath = [dataPath stringByAppendingPathComponent:@"MyFile.txt"];
NSString *content = @"My content";
  [content writeToFile:fileName 
                         atomically:NO 
                               encoding:NSStringEncodingConversionAllowLossy 
                                      error:nil];

这将在文档目录和名称为"MyDirectory"的文件中创建文件夹名称"MyFile.txt",其中包含内容"My content"

现在编写这段代码以从目录中获取文件列表

NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"MyDirectory"];
NSError * error;
NSArray * arrayMyDirectoryList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];

因此"arrayMyDirectoryList"将是您保存在目录中的所有文档的列表。