[swift-users] FileManager.copyItem not throwing?

John Brownie john_brownie at sil.org
Sat Nov 11 16:07:27 CST 2017


And that's the point. The throw does not happen. An error is logged, but 
execution continues as though there was no error.

John
> Howard Lovatt <mailto:howard.lovatt at gmail.com>
> 12 November 2017 at 07:43
> I don’t have any inside knowledge on this, i.e. I am not certain I am 
> correct, but my understanding was that you were meant to let it throw 
> and catch the error rather than test before hand.
>
> -- Howard.
>
> Marco S Hyman <mailto:marc at snafu.org>
> 11 November 2017 at 11:51
>
> Known (by Apple) bug. My report was closed as a duplicate of 30350792.
>
> My workaround is to do this in my do block after attempting to copy a 
> file to saveFileUrl:
>
> try fileManager.copyItem(at: url, to: saveFileUrl)
> /// DANGER WILL ROBINSON -- the above call can fail to return an
> /// error when the file is not copied. radar filed and
> /// closed as a DUPLICATE OF 30350792 which is still open.
> /// As a result I must verify that the copied file exists
> if !fileManager.fileExists(atPath: (saveFileUrl.path)) {
> unexpected(error: nil,
> "Cannot copy \(url.path) to \(saveFileUrl.path)")
> return false
> }
>
> which duplicates what the catch block would do.
>
> Marc
> John Brownie <mailto:john_brownie at sil.org>
> 11 November 2017 at 11:31
> I have code as follows:
>
> let fileManager = FileManager.default
> do {
>     try fileManager.createDirectory(at: 
> destination.deletingLastPathComponent(), withIntermediateDirectories: 
> true, attributes: nil)
>     try fileManager.copyItem(at: source, to: destination)
>     handler(true, nil)
> }
> catch let theError as NSError {
>     if theError.code == NSFileWriteNoPermissionError {
>         ...
>     }
>     else {
>         ...
>     }
> }
> catch {
>      handler(false, NSError(...))
> }
>
> Running on macOS 10.12.6, Xcode 8.3.2, I get to the copyItem call, 
> which shows an error on the console:
>
> 2017-11-11 11:18:25.931446+1000 MyApp[32662:2408351] open on 
> /path/to/file: Permission denied
>
> But it doesn't go to either of my catch blocks, but goes to the 
> following line, where the completion handler is to be run. What is 
> going on?
>
> John

-- 
John Brownie
SIL-PNG, Ukarumpa, Eastern Highlands, Papua New Guinea
Mussau-Emira language, New Ireland Province, Papua New Guinea
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20171112/bc82e7fa/attachment.html>


More information about the swift-users mailing list