Доступ к пути 'c: \ $ Recycle.Bin \ S-1-5-18' запрещен

У меня есть этот код для копирования всех файлов из исходного каталога, F:\, в целевой каталог.

public void Copy(string sourceDir, string targetDir)
{
  //Exception occurs at this line.
    string[] files = System.IO.Directory.GetFiles(sourceDir, "*.jpg", 
                                             SearchOption.AllDirectories);

    foreach (string srcPath in files)
    {
       File.Copy(srcPath, srcPath.Replace(sourceDir, targetDir), true);
    }
}

и получение исключения.

Если я опускаю SearchOption.AllDirectories, и он работает, но копирует только файлы из F:\

7 голосов | спросил Umair 18 MarpmTue, 18 Mar 2014 13:17:16 +04002014-03-18T13:17:16+04:0001 2014, 13:17:16

3 ответа


0

Используйте следующую функцию вместо System.IO.Directory.GetFiles:

IEnumerable<String> GetAllFiles(string path, string searchPattern)
    {
        return System.IO.Directory.EnumerateFiles(path, searchPattern).Union(
            System.IO.Directory.EnumerateDirectories(path).SelectMany(d =>
            {
                try
                {
                    return GetAllFiles(d,searchPattern);
                }
                catch (UnauthorizedAccessException e)
                {
                    return Enumerable.Empty<String>();
                }
            }));
    }
ответил Bohdan 19 FebruaryEurope/MoscowbThu, 19 Feb 2015 19:22:50 +0300000000pmThu, 19 Feb 2015 19:22:50 +030015 2015, 19:22:50
0

Объекты файловой системы защищены. Некоторые объекты файловой системы защищены таким образом, что к ним могут получить доступ только определенные пользователи. Вы столкнулись с файлом, к которому у пользователя, выполняющего код, нет достаточных прав доступа.

Причина, по которой у вас нет прав доступа к этой конкретной папке, заключается в защите безопасности различных пользователей системы. Данная папка является корзиной на этом диске. И каждый отдельный пользователь имеет свою собственную корзину, доступ к которой есть только у них. Если кто-нибудь сможет получить доступ к корзине любого другого пользователя, то пользователи смогут читать файлы друг друга, что является явным нарушением политики безопасности системы.

Возможно, самый простой способ обойти это - пропустить скрытые папки на корневом уровне диска. Этого простого изменения будет достаточно, чтобы решить вашу проблему, потому что вы наверняка не хотите копировать корзины.

ответил David Heffernan 18 MarpmTue, 18 Mar 2014 13:57:15 +04002014-03-18T13:57:15+04:0001 2014, 13:57:15
0

Эта папка является защищенной системной папкой (ваша корзина, каждый диск имеет свою собственную корзину). Просто поместите файл file.copy в оператор try catch и проигнорируйте /зарегистрируйте все ошибки. Таким образом, вы будете копировать только реальные файлы и пропускать системные файлы /папки.

Если вы действительно хотите избежать оператора try catch. Используйте классы fileinfo и info, чтобы выяснить, какие папки /файлы принадлежат системе и сгенерирует исключение.

ответил woutervs 18 MarpmTue, 18 Mar 2014 13:53:38 +04002014-03-18T13:53:38+04:0001 2014, 13:53:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132