UnauthorizedAccessException в копии файла - PullRequest
0 голосов
/ 09 января 2020

Я не могу скопировать pdf-файлы, загруженные из inte rnet.

Я даже установил атрибуты файлов на обычные значения на основе быстрого поиска, но это не работает.

Все пути и каталоги имеют полный доступ, и можно копировать другие типы файлов.

Код:

using System;
using System.IO;

namespace Test_Console_App
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var permission = new FileIOPermission(FileIOPermissionAccess.Write, @"D:\dummy.pdf"); // Alternatives tried D:\, E:\ E:\dummy.pdf
                var permissionSet = new PermissionSet(PermissionState.None);
                permissionSet.AddPermission(permission);
                if (permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))
                {
                    File.SetAttributes(@"D:\dummy.pdf", FileAttributes.Normal);
                    if (File.Exists(@"E:\dummy.pdf"))
                    {
                        File.Delete(@"E:\dummy.pdf");
                    }

                    File.Copy(@"D:\dummy.pdf", @"E:\dummy.pdf", true);
                    File.SetAttributes(@"E:\dummy.pdf", FileAttributes.Normal);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadKey();
        }
    }
}

Ошибка:

Система. UnauthorizedAccessException: доступ к пути 'E: \ dummy.pdf' запрещен.

в System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath)

в System.IO.File .InternalCopy (String sourceFileName, String destFileName, логическое перезапись, логическое checkHost)

в Test_Console_App.Program.Main (String [] args) в D: \ Projects \ Test_Console_App \ Test_Console_App \ Program.cs: строка 26

Ответы [ 3 ]

0 голосов
/ 09 января 2020

Согласно - File.Copy Method

Исключения - UnauthorizedAccessException - у вызывающей стороны нет необходимых прав доступа.

Вы можете проверить свои права на каталог, который вы пытаются скопировать файл, используя этот ответ - Как проверить разрешения на чтение и запись для папки в C#

0 голосов
/ 09 января 2020

Здесь вы можете иметь проблемы с доступом к источнику и получателю. Доступ к файлу "D: \ dummy.pdf" контролируется ACL. Вы можете проверить ACL, выбрав Свойства> Безопасность файла. У вас должен быть минимальный доступ для чтения.

Если файл существует, проверьте ACL для конечного файла E: \ dummy.pdf. Вы должны и для чтения / записи / удаления доступа к этому файлу.

Измененный код должен быть таким, как показано ниже:

if(File.Exists(@"E:\dummy.pdf"))
{
    File.Delete(@"E:\dummy.pdf");
}

File.Copy(@"D:\dummy.pdf", @"E:\dummy.pdf");

Существуют альтернативные способы копирования файла с использованием Backup Read / Запишите COM APi. Net

0 голосов
/ 09 января 2020

Вы можете проверить, есть ли у вас доступ к папке. Это диск, подключенный к сетевому диску. Попробуйте щелкнуть правой кнопкой мыши на папке и увидеть вкладку Безопасность, чтобы изменить права.

Согласно Msdn, исключение происходит из-за:

  1. У вызывающей стороны нет необходимых разрешений.
  2. Файл является исполняемым файлом, который используется.
  3. Путь - это каталог.
  4. Путь, указанный в файле только для чтения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...