Я могу получить доступ к файлу по сетевому пути, но не могу сохранить по тому же пути (C#) (asp.net)

В этом объявлении нет проблем с доступом к файлу в моей сети.

  MyApp = new Excel.Application();
  MyApp.Visible = false;
  MyBook = MyApp.Workbooks.Open("//NetworkFolderPath/File.xlsx"); //This line
  MySheet = (Excel.Worksheet)MyBook.Sheets[1]; 

Проблема возникает, когда я закончу редактирование своего файла и пытаюсь сохранить его, используя метод "SaveCopyAs()".

  MyBook.SaveCopyAs("//NetworkFolderPath/File2.xlsx");
  MyBook.Close(0);

Исключение, которое я получаю,

An exception of type 'System.Runtime.InteropServices.COMException' occurred in Application.dll but was not handled in user code

Additional information: Microsoft Excel cannot access the file    '//NetworkFolderPath/File2.xlsx'. There are several possible reasons:

1. The file name or path does not exist.

2. The file is being used by another program.

3. The workbook you are trying to save has the same name as a currently open  workbook.

Для номера 1: файл существует в папке m, и я получил доступ к файлу по пути, поэтому я исключил номер 1.

Для номера 2: я не уверен, может ли это быть причиной, было бы неплохо какое-то объяснение

Для номера 3: я присвоил книге другое имя, но я не уверен, решит ли это проблему.

Я действительно не уверен, куда идти отсюда. Вся помощь приветствуется.

1 ответ

Я видел это path does not exist ошибка при включении автономных файлов и повреждении кэша. Попробуйте сбросить кеш, следуя инструкциям.

Попробуйте это, это сэкономит мои 2 недели усилий, и приложение сохраняет pdf-файл на sahredpath с защищенным идентификатором (учетные данные), если у вас есть какие-либо вопросы, прокомментируйте ниже! Рад помочь вам

============================ публичный класс Impersonate { [DllImport("advapi32.dll", SetLastError = true)] приватный статический extern int LogonUser(строка lpszUsername, строка lpszDomain, строка lpszPassword, int dwLogonType, int dwLogonProvider, out int phToken);

    [DllImport("kernel32.dll")]
    private static extern int FormatMessage(int dwFlags, string lpSource, int dwMessageId, int dwLanguageId,
                                            StringBuilder lpBuffer, int nSize, string[] Arguments);


    private const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
    private const int LOGON32_PROVIDER_DEFAULT = 0;
    private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000;

    private static WindowsImpersonationContext winImpersonationContext = null;

    public static void ImpersonateUser(string domain, string userName, string password)
    {

        //Benutzer einloggen
        int userToken = 0;

        bool loggedOn = (LogonUser(userName, domain, password, LOGON32_LOGON_NETWORK_CLEARTEXT,
                                    LOGON32_PROVIDER_DEFAULT, out userToken) != 0);

        if (loggedOn == false)
        {
            int apiError = Marshal.GetLastWin32Error();
            StringBuilder errorMessage = new StringBuilder(1024);
            FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, null, apiError, 0, errorMessage, 1024, null);
            throw new Exception(errorMessage.ToString());
        }

        WindowsIdentity identity = new WindowsIdentity((IntPtr)userToken);
        winImpersonationContext = identity.Impersonate();

    }

    public static void UndoImpersonation()
    {
        if (winImpersonationContext != null)
        {
            winImpersonationContext.Undo();
        }
    }
}

2. Вызов олицетворения

        Impersonate.ImpersonateUser("domain", "user name", "password");
        //Your Code as the new User
        DirectoryInfo _dirInfo = new DirectoryInfo(@"file path");
        FileInfo[] _files = FileExtension.GetFilesByExtensions(_dirInfo, ".xls", ".xlsx").ToArray();
        Impersonate.UndoImpersonation();     

==============================

Ссылка:- https://forums.asp.net/t/2126720.aspx?Access+Denied+while+reading+writing+directory+in+Network+File+Share+through+Service+Account

Другие вопросы по тегам