IOS开发:指定路径创建新文件夹

这篇具有很好参考价值的文章主要介绍了IOS开发:指定路径创建新文件夹。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

指定路径创建新文件夹

典型错误示范:

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)
            }
        }

很遗憾,网上所有相关的博文都是这样写的。但使用最新的swift5.8如此操作,会出现以下报错:
Cannot use instance member ‘documentDirectoryURL’ within property initializer; property initializers run before ‘self’ is available
以及:
Expression expected

出现第一个错误的原因是,在swift中的一个结构体在编译时,编译器无法识别属性在初始化后立刻用于另一个属性的初始化赋值。对编译器来说,一个结构体同一对大括号中的几个属性都是几乎同时初始化的,不一定完全按代码的书写顺序进行。要解决这个问题,需要用到结构体的初始化函数。

struct FileUtils {
    let fm: FileManager
    let documentDirectoryURL: URL
    let directoryURL: URL
    let dspURL: URL //  DSP folder's URL
    let eeURL: URL //  EEPROM folder's URL
    var dirIsExist: Bool
    
    init() {
        self.fm = FileManager.default
        self.documentDirectoryURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
        self.directoryURL = documentDirectoryURL.appendingPathComponent("Bluetooth_Flash", conformingTo: .directory)
        self.dspURL = directoryURL.appendingPathComponent("DSP", conformingTo: .directory)
        self.eeURL = directoryURL.appendingPathComponent("EE", conformingTo: .directory)
        self.dirIsExist = fm.fileExists(atPath: directoryURL.path())
    }
}

出现第二个报错的原因是,在单独的结构体中不可以直接调用分支语句,应该设计一个专门的处理函数,把判断文件夹是否存在的条件分支语句放在一个函数里面。

struct FileUtils {
    let fm: FileManager
    let documentDirectoryURL: URL
    let directoryURL: URL
    let dspURL: URL //  DSP folder's URL
    let eeURL: URL //  EEPROM folder's URL
    var dirIsExist: Bool
    
    init() {
        self.fm = FileManager.default
        self.documentDirectoryURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
        self.directoryURL = documentDirectoryURL.appendingPathComponent("Bluetooth_Flash", conformingTo: .directory)
        self.dspURL = directoryURL.appendingPathComponent("DSP", conformingTo: .directory)
        self.eeURL = directoryURL.appendingPathComponent("EE", conformingTo: .directory)
        self.dirIsExist = fm.fileExists(atPath: directoryURL.path())
    }
    
    func createdDirectoryIfNeeded() {
        if !dirIsExist {
            do {
                try fm.createDirectory(at: directoryURL, withIntermediateDirectories: true)
                print(directoryURL.path)
            } catch {
                print(error.localizedDescription)
            }
            
            do {
                try fm.createDirectory(at: dspURL, withIntermediateDirectories: true)
                print(dspURL.path)
            } catch {
                print(error.localizedDescription)
            }
            
            do {
                try fm.createDirectory(at: eeURL, withIntermediateDirectories: true)
                print(eeURL.path)
            } catch {
                print(error.localizedDescription)
            }
        }
    }
}


如果要在页面初始化的时候调用创建新文件夹的这个函数,我们需要先在这个页面的View结构体中实例化上面这个FileUtils结构体。然后我们需要初始化FileUtils的各个属性,再在View初始化函数中调用创建文件夹的函数。

struct FileView: View {
    //  Create the instance of FileUtils struct
    let fileUtils = FileUtils.init()
    
    //  Call createdDirectoryIfNeeded() function when FileView inited
    init() {
        fileUtils.createdDirectoryIfNeeded()
    }
}

最后记得在ContentView中根据自己的逻辑调用或初始化该页面。文章来源地址https://www.toymoban.com/news/detail-634595.html

到了这里,关于IOS开发:指定路径创建新文件夹的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理

    目录 Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、简单实现步骤 五、关键代码 附录: 一、不同平台使用宏区分路径加载 二、Unity3D中的资源路径 三、Unity3D各平台路径(包括手

    2024年01月19日
    浏览(55)
  • 限制Linux指定用户访问某个文件夹,禁止其访问指定文件夹

         默认情况下用户本身就只能读写执行自己目录下自己创建的文件,自己主目录以外的文件都没有写权限、执行权限;自己主目录以外的目录,则只有r和x权限,没有w权限,对于合法的ssh用户,这样的权限就已经足够了。 否则如果去该系统目录和文件的权限,可能会引起

    2024年02月06日
    浏览(55)
  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

    在1文件夹中有1,2两个文件夹 将这两个文件夹中的文件复制到 after_copy中 源文件 复制后: 参考1 源文件 复制后 参考2 如果复制bmp文件就将 suffix = \\\".json\\\" 改为 suffix = \\\".bmp\\\"

    2024年02月11日
    浏览(62)
  • Python-拷贝文件和文件夹到指定的文件夹

    之前使用windows批处理命令,感觉语法太不友好,还需要传很多参数,用起来很麻烦,最后还是用Python来实现。 网上太多的教程,真的不知所云,有点太麻烦了,拷贝之前先删除,也懒得判断。 shutil.copyfile 顾名思义 拷贝的是文件 shutil.copytree 顾名思义 拷贝的是文件夹 这样使

    2024年02月11日
    浏览(75)
  • Unity 获取文件夹引用并读取文件夹路径

    编辑器中的文件夹属于DefaultAssets类型的资源 EditorGUILayout.ObjectField 可以获取对象的引用 AssetDatabase.GetAssetPath可通过对象的实例id获取资源路径 DirectoryInfo 可获取目录内文件信息 Path.GetFileNameWithoutExtension 可获取无后缀的文件名 弹出窗口 选择文件夹 打印文件夹内文件名 点击文件

    2024年04月27日
    浏览(35)
  • linux 删除指定文件夹外的其他所有(文件)文件夹

    方法一. 删除指定文件夹外的其他所有文件夹命令: 方法二. 删除指定文件夹外的其他所有文件夹命令: 查看当前文件夹下有哪些文件和子文件夹,当看到俩个文件夹和多个文件,需求是只保留 public 这个文件夹 其他的文件夹和文件 统统都删除,如下图所示,只要一个命令:

    2024年02月09日
    浏览(60)
  • Git 忽略指定文件或文件夹

    1. 在.gitignore中添加忽略的文件 2. 然后在该目录执行  注意: .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。 正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。  

    2024年02月11日
    浏览(46)
  • bat复制文件到指定文件夹

    FOR /F %%N IN (\\\'DIR /B /S \\\"D:文件夹*.*\\\"\\\') DO (COPY %%N \\\"E:文件夹\\\") *.*代表所有文件,文件夹除外。 解释:将D盘文件夹所有文件,复制到E盘文件夹。 文件名只能,中文数字英文组合,带有特殊符号的无法复制。    

    2024年02月13日
    浏览(50)
  • java 在文件夹以及子文件夹中遍历获取指定文件的list

    1.  使用java 递归方法获取指定文件的list,相当于在一个文件夹以及子文件夹,搜索文件的功能。 直接上代码: 

    2024年02月13日
    浏览(49)
  • C#选定文件复制到指定文件夹

    搜索到的: string pLocalFilePath =\\\"\\\";//要复制的文件路径 string pSaveFilePath =\\\"\\\";//指定存储的路径 if (File.Exists(pLocalFilePath))//必须判断要复制的文件是否存在 { File.Copy(pLocalFilePath, pSaveFilePath, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换 } 自己应用:

    2023年04月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包