ios 在Swift 3.0中创建目录

f0brbegy  于 2023-05-30  发布在  iOS
关注(0)|答案(6)|浏览(119)

我是一个新的学生在9年级学习swift,创建一个学校项目。
我正在尝试创建一个目录,我想在其中保存扫描文件为pdf格式。
在创建目录时,我收到下面的错误。
错误1:
无法在属性初始值设定项内使用示例成员“filemgr”;属性初始值设定项在“self”可用之前运行。
错误2:
预期声明
代码:

let filemgr = FileManager.default

let dirPaths = filemgr.urls(for: .documentDirectory, in: .userDomainMask)

let docsURL = dirPaths[0]

let newDir = docsURL.appendingPathComponent("data").path

do{
    try filemgr.createDirectory(atPath: newDir,withIntermediateDirectories: true, attributes: nil)
} catch {
    print("Error: \(error.localizedDescription)")
}

请协助我解决这个问题。
谢谢。

7ivaypg9

7ivaypg91#

请使用此代码:

Swift 5.0Swift 4.0Swift 3.0

let DocumentDirectory = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let DirPath = DocumentDirectory.appendingPathComponent("FOLDER_NAME")
do
{
    try FileManager.default.createDirectory(atPath: DirPath!.path, withIntermediateDirectories: true, attributes: nil)
}
catch let error as NSError
{
    print("Unable to create directory \(error.debugDescription)")
}
print("Dir Path = \(DirPath!)")
lg40wkob

lg40wkob2#

对于Swift 4.0请使用此

let fileManager = FileManager.default
    if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
        let filePath =  tDocumentDirectory.appendingPathComponent("\(FOLDER_NAME)") 
        if !fileManager.fileExists(atPath: filePath.path) {
            do {
                try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil)
            } catch {
                NSLog("Couldn't create document directory")
            }
        }
        NSLog("Document directory is \(filePath)")
    }
daolsyd0

daolsyd03#

对于Swift 4.0,我在URL的基础上创建了以下扩展,允许在应用程序内的documents目录下创建一个文件夹。

import Foundation

extension URL {
    static func createFolder(folderName: String) -> URL? {
        let fileManager = FileManager.default
        // Get document directory for device, this should succeed
        if let documentDirectory = fileManager.urls(for: .documentDirectory,
                                                    in: .userDomainMask).first {
            // Construct a URL with desired folder name
            let folderURL = documentDirectory.appendingPathComponent(folderName)
            // If folder URL does not exist, create it
            if !fileManager.fileExists(atPath: folderURL.path) {
                do {
                    // Attempt to create folder
                    try fileManager.createDirectory(atPath: folderURL.path,
                                                    withIntermediateDirectories: true,
                                                    attributes: nil)
                } catch {
                    // Creation failed. Print error & return nil
                    print(error.localizedDescription)
                    return nil
                }
            }
            // Folder either exists, or was created. Return URL
            return folderURL
        }
        // Will only be called if document directory not found
        return nil
    }
}

如果所需的文件夹不存在,它将创建它。然后,假设文件夹存在,它将URL返回给用户。否则,如果失败,则返回nil
例如,要创建文件夹“MyStuff”,您可以这样调用它:

let myStuffURL = URL.createFolder(folderName: "MyStuff")

这将返回:
文件:///var/移动的/Containers/Data/Application/4DE 0A 1C 0 -8629- 47 C9 - 87 D 7-C2 B4 F3 A16 D24/Documents/MyStuff/
您还可以使用以下内容创建嵌套文件夹:

let myStuffHereURL = URL.createFolder(folderName: "My/Stuff/Here")

它为您提供:
文件:///var/移动的/Containers/Data/Application/4DE0A1C0-8629-47C9-87D7-C2B4F3A16D24/Documents/My/Stuff/Here/

7vhp5slm

7vhp5slm4#

你得到这个是因为你在错误的地方给newDir示例赋值。
我用viewDidLoad写了你的代码,它工作得很好。

kiz8lqtg

kiz8lqtg5#

适用于Swift 5及以上版本

let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let directoryURL = documentDirectoryURL.appendingPathComponent("FolderName", isDirectory: true)
        
        if FileManager.default.fileExists(atPath: directoryURL.path) {
             print(directoryURL.path)
        } else {
            do {
                try FileManager.default.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
                print(directoryURL.path)
            } catch {
                print(error.localizedDescription)
            }
nbysray5

nbysray56#

创建目录

private let fileManager = FileManager.default

func createDirectory(atURL url:URL,withFolderName folderName:String)->Bool{
    do{
        let folderURL = url.appendingPathComponent(folderName, conformingTo: .folder)
        try fileManager.createDirectory(at: folderURL, withIntermediateDirectories: false)
        print("Directory Created!")
        return true
    }catch(let creationError){
        print("Error while creating Directory. \(creationError)")
    }
    return false
}

func getDownloadsDirectoryURL()->URL{
    return fileManager.urls(for: .downloadsDirectory, in: .userDomainMask)[0]
}

相关问题