Directory exist...

Jcb84Jcb84 Membre
29 sept. modifié dans Dev. macOS #1

Bonjour à tous,

Quelqu'un aurait il 3 minutes pour relire le bout de code ci-dessous et me dire pourquoi mon test sur l'existence du répertoire (et sur le fichier) échoue systématiquement ...

Mon code fonctionne mais j'aimerai bien comprendre le pourquoi du comment...
Merci d'avance.
Jc

func createPrivateFolder(){

    let fileManager = FileManager.default
    var isDirExist = false
    var isDirectory = ObjCBool(true)

    let paths:[String] = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
    let directory:String = paths[0]
    let cacheDirectoryUrl = URL(fileURLWithPath: directory, isDirectory: true).appendingPathComponent(Bundle.main.bundleIdentifier ?? "MyApp").appendingPathComponent("Cache")

    print(directory)
    print(cacheDirectoryUrl.absoluteString)
    print(cacheDirectoryUrl.absoluteURL)

    // Est-ce que le répertoire existe ?
    if !fileManager.fileExists(atPath: cacheDirectoryUrl.absoluteString, isDirectory: &isDirectory ){

        do {
            try fileManager.createDirectory(at: cacheDirectoryUrl , withIntermediateDirectories: true, attributes: nil)
            print("Creation folder ok !")
            isDirExist = true
        }
        catch {
            print("Error: Unable to create directory: \(error)")
        }
    } else {
        print("Directory already exists !")
        isDirExist = true
    }

    if isDirExist {
        // step 2 creation fichier
        let fichierFolderXml = cacheDirectoryUrl.appendingPathComponent("folder.dat")
        print("create file ?")
        if !fileManager.fileExists(atPath : fichierFolderXml.absoluteString ){
            do {

                let pendingInstallId = "yourId:\(UUID())"
                try pendingInstallId.write(to: fichierFolderXml, atomically: false, encoding: String.Encoding.utf8)
                print("create file OK")
            }
            catch {
                print("Error: Unable to create file: \(error)")
            }
        } else {
            print("folder.xml already exists in folder...")
        }
    }
}
Mots clés:

Réponses

  • LarmeLarme Membre

    if !fileManager.fileExists(atPath: cacheDirectoryUrl.absoluteString, isDirectory: &isDirectory ) =>
    if !fileManager.fileExists(atPath: cacheDirectoryUrl.path, isDirectory: &isDirectory )?

    Pareil pour : if !fileManager.fileExists(atPath : fichierFolderXml.absoluteString ){ => if !fileManager.fileExists(atPath : fichierFolderXml.path ){

  • Jcb84Jcb84 Membre

    Merci !

    Il me semblait pourtant avoir essayer avec .path ... je me doutais que c'etait le %20 qui me mettais le bronx...

  • Joanna CarterJoanna Carter Membre, Modérateur
    29 sept. modifié #4

    Apple recommande fortement d'utiliser les méthodes d'URL à la place de celles de FileManager.

    Et, en plus, il faut passer true à fileManager.createDirectory(at: _, withIntermediateDirectories: _, attributes:_)

    Voici du code comme exemple :

      func createPrivateFolder()
      {
        let fileManager = FileManager.default
    
        guard let applicationSupportURL = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask).first else
        {
          return
        }
    
        let cacheDirectoryUrl = applicationSupportURL.appendingPathComponent(Bundle.main.bundleIdentifier ?? "MyApp").appendingPathComponent("Cache")
    
        do
        {
          let _ = try cacheDirectoryUrl.checkResourceIsReachable()
        }
        catch CocoaError.fileReadNoSuchFile
        {
          do
          {
            try fileManager.createDirectory(at: cacheDirectoryUrl, withIntermediateDirectories: true, attributes: nil)
          }
          catch CocoaError.fileNoSuchFile
          {
              print("withIntermediateDirectories should be true")
          }
          catch
          {
            print("unhandled error")
          }
        }
        catch
        {
          print("unhandled error")
        }
    
        let fichierXmlUrl = cacheDirectoryUrl.appendingPathComponent("file.dat")
    
        do
        {
          let _ = try fichierXmlUrl.checkResourceIsReachable()
        }
        catch CocoaError.fileReadNoSuchFile
        {
          let pendingInstallId = "yourId:\(UUID())"
    
          do
          {
            try pendingInstallId.write(to: fichierXmlUrl, atomically: false, encoding: .utf8)
          }
          catch
          {
            print("could not write file")
          }
        }
        catch
        {
          print("unhandled error")
        }
      }
    
Connectez-vous ou Inscrivez-vous pour répondre.