anchor.diff:          (concatenate 'string (pathname-name pathname) "." (pathname-type pathname))
           (pathname-name pathname))))
   
  -(defun find-file (host pathname)
  +(defun open-file-metadata (host pathname)
     (loop :with fat32 := (fat-structure host)
           :with disk := (partition host)
  +        :with directory-cluster := (first-root-dir-cluster fat32)
  +        :with parent-dir := (read-file fat32 disk (first-root-dir-cluster fat32) (fat host))
           :with file-name := (file-name pathname)
  -        :with cluster-n := (first-root-dir-cluster fat32)
  -        :with file-data := (read-file fat32 disk (first-root-dir-cluster fat32) (fat host))
  -        :for directory :in (rest (pathname-directory pathname))
  -        :do (do-files (start) file-data
  -              (error 'simple-file-error
  -                     :pathname pathname
  -                     :format-control "Directory ~A not found. ~S"
  -                     :format-arguments (list directory pathname))
  -              (when (string= directory (read-file-name file-data start))
  -                (setf cluster-n (read-first-cluster file-data start)
  -                      file-data (read-file fat32
  -                                           disk
  -                                           (read-first-cluster file-data start)
  -                                           (fat host)))
  -                (return t)))
  -        :finally (if (null file-name)
  -                     (return-from find-file (values file-data cluster-n))
  -                     (do-files (start) file-data
  -                       (return-from find-file (values file-data cluster-n))
  -                       (when (string= file-name (read-file-name file-data start))
  -                         (return-from find-file (values file-data cluster-n start)))))))
  +        :for file :in (rest (pathname-directory pathname))
  +        :do (do-files (start) parent-dir
  +              (return-from open-file-metadata nil)
  +              (when (and (string= file (read-file-name parent-dir start))
  +                         (directory-p parent-dir start))
  +                (setf directory-cluster (read-first-cluster parent-dir start)
  +                      parent-dir (read-file fat32
  +                                            disk
  +                                            (read-first-cluster parent-dir start)
  +                                            (fat host)))
  +                (return start)))
  +        :finally (do-files (start) parent-dir
  +                   (return-from open-file-metadata (values parent-dir directory-cluster))
  +                   (when (and (string= file-name (read-file-name parent-dir start))
  +                              (file-p parent-dir start))
  +                     (return-from open-file-metadata (values parent-dir directory-cluster start))))))
  +
  +(defun open-file (host pathname)
  +  (multiple-value-bind (parent-dir parent-cluster file-offset) (open-file-metadata host pathname)
  +    (declare (ignore parent-cluster))
  +    (when file-offset
  +      (return-from open-file
  +        (values (read-file (fat-structure host)
  +                           (partition host)
  +                           (read-first-cluster parent-dir file-offset)
  +                           (fat host))
  +                (read-first-cluster parent-dir file-offset)
  +                (read-file-length parent-dir file-offset))))))
   
   (defmethod open-using-host ((host fat32-host) pathname
                               &key direction element-type if-exists if-does-not-exist external-format)
  
positive.code:   (let* ((disk (partition host))
           (fat32 (fat-structure host))
           (fat (fat host)))
      (multiple-value-bind (directory cluster-n start) (find-file host path)
        (assert start (start) "File/directory not found. ~s" path)
        (remove-file directory start disk cluster-n fat32 fat))))
  
  (defmethod expunge-directory-using-host ((host fat32-host) path &key)
    (declare (ignore host path))
  
negative.code:   (if (string= (namestring source)
                 (namestring dest))
        t
        (multiple-value-bind (source-dir source-cluster source-start) (open-file-metadata host source)
          (assert source-start (source-start) "Source file not found. ~s" source)
          (multiple-value-bind (dest-dir dest-cluster dest-start) (open-file-metadata host dest)
            (assert (not dest-start) (dest-start) "Destination file alredy exist. ~s" dest)
            (let ((fat32 (fat-structure host))
                  (disk (partition host))
  