从服务器我正在下载大量文件,我想将它们保存到本地文件系统中。 但问题是很多文件会有相同的名称,所以我想创建一个随机文件夹并将每个文件保存到不同的目录中。
所以结构应该是homeDirectory - > randomFolder1 - > file1,homeDirectory - > randomfolder2 - > file2。
我如何在iOS中执行此操作?请帮忙。
答案 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];