private static IShellItem CreateFolderShellItem(string path)
        {
            IShellItem shellItem;

            path = Path.GetFullPath(path);
            if (FileSystem.DoesPathExist(path))
            {
                shellItem = CreateShellItem(path);
            }
            else
            {
                using (var bindCtxReleaser = new ComReleaser <IBindCtx>(NativeMethods.CreateBindCtx()))
                {
                    IBindCtx bindCtx = bindCtxReleaser.ComObject;
                    bindCtx.RegisterObjectParam
                    (
                        NativeMethods.STR_FILE_SYS_BIND_DATA,
                        CreateFolderIfDoesntExistsFileSystemBindData
                    );

                    shellItem = CreateShellItem(path, bindCtx);
                }
            }

            return(shellItem);
        }
 internal void AddDeleteFileOperation(DeleteFileOperation deleteFileOperation)
 {
     using (var file = new ComReleaser <IShellItem>(CreateShellItem(deleteFileOperation.FilePath)))
     {
         this.fileOperation.DeleteItem(file.ComObject, null);
     }
 }
 internal void AddRenameFileOperation(RenameFileOperation renameFileOperation)
 {
     using (var file = new ComReleaser <IShellItem>(CreateShellItem(renameFileOperation.FilePath)))
     {
         this.fileOperation.RenameItem(file.ComObject, renameFileOperation.NewFileName, null);
     }
 }
 internal void AddNewFileOperation(NewFileOperation newFileOperation)
 {
     using (var destFolder = new ComReleaser <IShellItem>(CreateFolderShellItem(newFileOperation.DestinationFolderPath)))
     {
         this.fileOperation.NewItem
         (
             destFolder.ComObject,
             (FILE_ATTRIBUTE)newFileOperation.FileAttributes,
             newFileOperation.FileName,
             newFileOperation.TemplateName,
             null
         );
     }
 }
 private void AddMoveCopyItem
 (
     MoveCopyFileOperation moveCopyFileOperation,
     AddMoveCopyOperationAction addMoveCopyOperationAction
 )
 {
     using (var sourceFile = new ComReleaser <IShellItem>(CreateShellItem(moveCopyFileOperation.SourceFilePath)))
         using (var destFolder = new ComReleaser <IShellItem>(CreateFolderShellItem(moveCopyFileOperation.DestionationFolderPath)))
         {
             addMoveCopyOperationAction
             (
                 sourceFile.ComObject,
                 destFolder.ComObject,
                 moveCopyFileOperation.FileName,
                 null
             );
         }
 }