UnauthorizedAccessException при попытке удалить дубликаты файлов в каталоге - PullRequest
1 голос
/ 28 января 2020

Я работаю над кодом с целью удаления дубликатов файлов в любом месте, где ему разрешено. Я уже пробовал несколько вещей, но он не удаляет дубликаты файлов, к которым у меня был бы другой доступ.

Я также пытался добавить это

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Я тоже пробовал это

File.SetAttributes(path, FileAttributes.Normal);

Но это мне больше не помогло

Как мне от этого избавиться? И возможно ли удалить дубликаты файлов везде, где есть разрешение на вашем P C? Потому что теперь код выполняется, но я получаю исключение, когда дубликаты файлов не удаляются.

Это мой код

               try
                {
                    string path;
                    ConsoleKeyInfo cki;
                    double totalSize = 0;
                    path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
                    DirectoryInfo directoryInfo = new DirectoryInfo(path);
                    File.SetAttributes(path, FileAttributes.Normal);
                    var fileList = directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories).ToList();
                    int totalFiles = fileList.Count;

                    List<FileDetails> finalDetails = new List<FileDetails>();
                    List<string> ToDelete = new List<string>();
                    finalDetails.Clear();
                    {
                        {
                            for (int i = 0; i < fileList.Count; i++)
                            {
                                {
                                    string item = fileList[i].FullName;
                                    using (var fs = new FileStream(item, FileMode.Open, FileAccess.Read))
                                    {
                                        finalDetails.Add(new FileDetails()
                                        {
                                            FileName = item,
                                            FileHash = BitConverter.ToString(SHA1.Create().ComputeHash(fs)),
                                        });
                                    }
                                }
                            }
                        }
                        var similarList = finalDetails.GroupBy(f => f.FileHash)
                       .Select(g => new { FileHash = g.Key, Files = g.Select(z => z.FileName).ToList() });


                        ToDelete.AddRange(similarList.SelectMany(f => f.Files.Skip(1)).ToList());
                        if (ToDelete.Count > 0)
                        {
                            Console.WriteLine("Files being deleted- ");
                            for (int i = 0; i < ToDelete.Count; i++)
                            {
                                string item = ToDelete[i];
                                Console.WriteLine(item);
                                FileInfo fi = new FileInfo(item);
                                totalSize += fi.Length;
                            }
                        }
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Total space made free-  {0}mb", Math.Round((totalSize / 1000000), 6).ToString());
                        {
                            ToDelete.ForEach(File.Delete);
                        }
                    }
                }
                catch (System.UnauthorizedAccessException)
                {

                }
                catch (Exception ex)
                {

                }
...