ddolce
ddolce

Reputation: 815

Swift: copying files gives Cocoa Error 262

I'm trying to move my files up a level in some random directory in the default Documents directory. But when copying, Swift gave me the error Cocoa Error 262: NSFileReadUnsupportedSchemeError. Why did I get this error? I ran a quick search and pretty much everyone who'd encountered this problem was trying to copy files out of the camera roll, but I'm not. Any thoughts? Thanks in advance.

Code here:

private func copyFilesInDirectory(fromDir: String, toDirectory toDir: String, withCompletionHandler handler: ()->()){
    println("from: \(fromDir)\nto: \(toDir)")
    var error: NSError?

    var contents = fileManager.contentsOfDirectoryAtPath(fromDir, error: &error)
    if let dirContents = contents{
        let enumerator = (dirContents as NSArray).objectEnumerator()

        while let file = enumerator.nextObject() as? String{
            let filePath = fromDir.stringByAppendingString("/\(file)")
            println("copying \(filePath)")
            if(fileManager.copyItemAtURL(NSURL(fileURLWithPath: filePath)!, toURL: NSURL(string: toDir)!, error: &error)){
                println("COPIED")
            }
            else{
                println("COPY ERROR: \(error!.localizedDescription)")
            }
        }
        handler()
    }
}

and here's the log if anyone's interested:

    from: /Users/dolce/Library/Developer/CoreSimulator/Devices/05566649-BABB-44BE-BE6F-AFF7B41E3065/data/Containers/Data/Application/F5A83C94-C177-4826-BDD5-3A50E7508239/Documents/Hello/tmp
    to: /Users/dolce/Library/Developer/CoreSimulator/Devices/05566649-BABB-44BE-BE6F-AFF7B41E3065/data/Containers/Data/Application/F5A83C94-C177-4826-BDD5-3A50E7508239/Documents/Hello
    copying /Users/dolce/Library/Developer/CoreSimulator/Devices/05566649-BABB-44BE-BE6F-AFF7B41E3065/data/Containers/Data/Application/F5A83C94-C177-4826-BDD5-3A50E7508239/Documents/Hello/tmp/test.png
    COPY ERROR: The operation couldn’t be completed. (Cocoa error 262.)

Upvotes: 0

Views: 1330

Answers (2)

Martin R
Martin R

Reputation: 540005

The toURL parameter of copyItemAtURL() must not be the destination directory, but the URL of the destination file. This can be created with

let destPath = toDir.stringByAppendingPathComponent(file)

You should also replace

let filePath = fromDir.stringByAppendingString("/\(file)")

with

let filePath = fromDir.stringByAppendingPathComponent(file)

There is also a copyItemAtPath() method which saves you from converting the paths to URLs.

Upvotes: 1

Duncan C
Duncan C

Reputation: 131481

On an iOS device, the simple answer is you can't do that. On the simulator things are little different. What you're probably dealing with is file permissions on the directory you're trying to write to.

As a general rule on iOS, you can write to the designated directories like the documents/caches and nothing else.

Upvotes: 0

Related Questions