public static bool Restore(string Path)
        {
            try
            {
                using (ShellItem SourceItem = new ShellItem(Path))
                {
                    string DirectoryName = System.IO.Path.GetDirectoryName(SourceItem.Name);

                    if (!Directory.Exists(DirectoryName))
                    {
                        _ = Directory.CreateDirectory(DirectoryName);
                    }

                    using (ShellFolder DestItem = new ShellFolder(DirectoryName))
                    {
                        ShellFileOperations.Move(SourceItem, DestItem, null, ShellFileOperations.OperationFlags.AddUndoRecord | ShellFileOperations.OperationFlags.NoConfirmMkDir | ShellFileOperations.OperationFlags.Silent | ShellFileOperations.OperationFlags.RenameOnCollision);
                    }

                    string ExtraInfoPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Path), System.IO.Path.GetFileName(Path).Replace("$R", "$I"));

                    if (File.Exists(ExtraInfoPath))
                    {
                        File.Delete(ExtraInfoPath);
                    }
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#2
0
        public void MoveItemTest()
        {
            // Delete item to Recycle Bin
            using var tmp = new TempFile();
            Assert.That(() => ShellFileOperations.Delete(tmp.FullName), Throws.Nothing);

            // Find deleted item
            using var bin = new ShellFolder(KNOWNFOLDERID.FOLDERID_RecycleBinFolder);
            var item = bin.FirstOrDefault(si => si.Name == tmp.FullName);

            Assert.NotNull(item);

            // Restore item
            using var dest = new ShellFolder(Path.GetDirectoryName(tmp.FullName));
            Assert.That(() => ShellFileOperations.Move(item, dest, null, ShellFileOperations.OperationFlags.NoConfirmation), Throws.Nothing);
            Assert.IsTrue(File.Exists(tmp.FullName));
        }
示例#3
0
        public static bool Move(string SourcePath, string DestinationPath, string NewName = null)
        {
            try
            {
                using (ShellItem SourceItem = new ShellItem(SourcePath))
                    using (ShellFolder DestItem = new ShellFolder(DestinationPath))
                    {
                        ShellFileOperations.Move(SourceItem, DestItem, NewName, ShellFileOperations.OperationFlags.AllowUndo | ShellFileOperations.OperationFlags.NoConfirmMkDir | ShellFileOperations.OperationFlags.Silent);
                    }

                return(true);
            }
            catch
            {
                return(false);
            }
        }