在文件系统中创建一个随机文件夹并保存下载的文件iOS

时间:2013-12-29 11:35:45

标签: ios iphone objective-c ipad

从服务器我正在下载大量文件,我想将它们保存到本地文件系统中。 但问题是很多文件会有相同的名称,所以我想创建一个随机文件夹并将每个文件保存到不同的目录中。

所以结构应该是homeDirectory - > randomFolder1 - > file1,homeDirectory - > randomfolder2 - > file2。

我如何在iOS中执行此操作?请帮忙。

3 个答案:

答案 0 :(得分:4)

使用以下代码创建文件夹。在App的文档目录中为这些文件夹命名唯一的timeStamps

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

NSString *timestamp = [NSString stringWithFormat:@"%lu", (long)[[NSDate date] timeIntervalSince1970]];  // to get unique name for your folder

NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:timestamp];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder

创建此文件夹后,将下载的文件保存在文件夹中。

答案 1 :(得分:3)

我更喜欢将UUID用于随机文件名:

- (NSString *) newImageName
{
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    NSString *uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(NULL, uuid));
    CFRelease(uuid);
    return uuidString;
}

更新从iOS 6和OS X 10.8开始,使用NSUUID简化了这一过程:

- (NSString *) newImageName
{
    return [[NSUUID UUID] UUIDString];
}

答案 2 :(得分:1)

只需在名称中创建一个随机数字的文件夹即可。为避免重复的随机数,您可以添加时间戳。

NSData *yourFileContents;
NSString *yourFileName;

NSInteger randomNumber = arc4random() % 10000000;
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
NSString *folderName = [NSString stringWithFormat:@"Folder-%u-%f", 
   randomNumber, time * 10000];

NSArray *paths = 
  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *folderPath = [documentsPath stringByAppendingPathComponent:folderName];
NSString *filePath = [folderPath stringByAppendingPathComponent:yourFileName];

[yourFileContents writeToFile:filePath atomically:YES];