 
         let removeOperation = DiskMemoryBlockOperation() { [unowned self] in
             let path = self.diskPath(for: key)
+            let fileURL = URL(fileURLWithPath: path)
+            
+            guard let fileSize = fileURL.resourceValues(forKeys: [.fileSizeKey]).fileSize else {
+                return completion { throw PersistenceError.other(Error.failedToRemoveFile(nil)) }
+            }
 
             do {
-                try self.fileManager.removeItem(atPath: path)
+                try self.remove(fileAtURL: fileURL, size: UInt64(fileSize))
             } catch let error {
-                return completion { throw PersistenceError.other(Error.failedToRemoveFile(error)) }
+                return completion { throw error }
             }
 
             completion { () }

    }

    private func directoryContents(with keys: [URLResourceKey]) -> [URL] {
        guard let url = URL(string: configuration.path) else {
            assertionFailure("💥 failed to create url with path 👉 `\(configuration.path)`")
            return []
        }

        guard let urls = try? fileManager.contentsOfDirectory(at: url,
                                                              includingPropertiesForKeys: keys,

            let urls = self.directoryContents(with: [.contentAccessDateKey, .fileSizeKey])

            typealias FileAccessTimeSizeTuple = (accessTime: TimeInterval, size: UInt64)
            typealias FileURLAttributesTuple = (url: URL, fileAttr: FileAccessTimeSizeTuple)

            let fileAttributes: [FileURLAttributesTuple] = urls.map {
                let resourceValue = $0.resourceValues(forKeys: [.contentAccessDateKey, .fileSizeKey])

                return ($0, (resourceValue.contentAccessDate?.timeIntervalSince1970 ?? 0, UInt64(resourceValue.fileSize ?? 0)))
                }.sorted { $0.fileAttr.accessTime > $1.fileAttr.accessTime }

            var evictSize: UInt64 = 0
