Пример #1
0
        public static bool Restore(string OriginPath)
        {
            try
            {
                using (ShellItem SourceItem = RecycleBin.GetItemFromOriginalPath(OriginPath))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(SourceItem.Name));

                    if (File.Exists(SourceItem.FileSystemPath))
                    {
                        File.Move(SourceItem.FileSystemPath, StorageController.GenerateUniquePath(SourceItem.Name));
                    }
                    else if (Directory.Exists(SourceItem.FileSystemPath))
                    {
                        Directory.Move(SourceItem.FileSystemPath, StorageController.GenerateUniquePath(SourceItem.Name));
                    }

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

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

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Пример #2
0
        public static bool Restore(params string[] OriginPathList)
        {
            Dictionary <string, ShellItem> PathDic = new Dictionary <string, ShellItem>();

            try
            {
                foreach (ShellItem Item in RecycleBin.GetItems())
                {
                    if (File.Exists(Item.FileSystemPath))
                    {
                        if (Path.HasExtension(Item.Name))
                        {
                            PathDic.TryAdd(Item.Name, Item);
                        }
                        else
                        {
                            PathDic.TryAdd(Item.Name + Item.FileInfo.Extension, Item);
                        }
                    }
                    else if (Directory.Exists(Item.FileSystemPath))
                    {
                        PathDic.TryAdd(Item.Name, Item);
                    }
                }

                bool HasError = false;

                foreach (string OriginPath in OriginPathList)
                {
                    if (PathDic.TryGetValue(OriginPath, out ShellItem SourceItem))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(SourceItem.Name));

                        if (File.Exists(SourceItem.FileSystemPath))
                        {
                            File.Move(SourceItem.FileSystemPath, StorageController.GenerateUniquePath(OriginPath));
                        }
                        else if (Directory.Exists(SourceItem.FileSystemPath))
                        {
                            Directory.Move(SourceItem.FileSystemPath, StorageController.GenerateUniquePath(OriginPath));
                        }

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

                        if (File.Exists(ExtraInfoPath))
                        {
                            File.Delete(ExtraInfoPath);
                        }
                    }
                    else
                    {
                        HasError = true;
                    }
                }

                return(!HasError);
            }
            catch
            {
                return(false);
            }
            finally
            {
                foreach (ShellItem Item in PathDic.Values)
                {
                    Item.Dispose();
                }
            }
        }