“ {它未返回0,而errno被设置为22”表示什么?

时间:2020-06-24 22:07:55

标签: ios swift

我到处都在寻找errno 22的含义,但未能找到有关它的任何信息:

2020-06-24 11:39:09.483111-0600 MyApp [1773:478284]名为mkdir(“ / private / var / mobile / library / LiveFiles / com.apple.filesystems.userfsd / MyUSB // My_Files / myiphone / IMG_2302.JPG.sb-db06fe8e-O0frER“),它没有返回0,并且errno设置为22。 照片数据的最终副本= IMG_2302.JPG的673587字节

在遍历一组PHAsset并将其复制到外部驱动器时,我看到了这一点。前2000张照片全部正常,然后此报告之后的所有照片突然报告errno 22。

我尝试使用try / catch捕获有关此错误的更多详细信息,但没有发现任何错误。所以,我认为它来自Foundation中的某个地方?

内存使用率一直保持较低,大约为40MB。

errno 22表示该问题是什么?

我要复制的循环的相关部分如下。使用data.write还是Filemanager.default.createfile,都会看到相同的问题:

_ = autoreleasepool {
            PHImageManager.default().requestImageDataAndOrientation(
                for: mediaFile,
                options: options) { (data, dataUTI, orientation, info) in
                    
                    if data != nil {
                        self.imgData = data!
                    }
            }
        }
        
        let toFileNameURL = destinationPathURL.appendingPathComponent(currentFileName)
            
        let completed = FileManager.default.createFile(atPath: toFileNameURL.path, contents: imgData, attributes: nil)
        print("copy worked?  \(completed)")
        //try self.imgData.write(to: toFileNameURL, options: .atomic)

1 个答案:

答案 0 :(得分:0)

错误本身对您来说没有什么价值。它来自sys/errno.h,位于Foundation树林深处。这是标准的C文件,您可以在线找到许多副本(例如here)。您的特定错误如下所示:

#define EINVAL      22      /* Invalid argument */

错误可能来自dirhelper,但即使这样也无济于事。

因此,请看看是什么原因造成的。大线索是它仅在2000个文件之后发生。 OOM,USB上的空间或超过其他限制是最可疑的。

第二个问题是,为什么在复制文件时抱怨mkdir