Как прочитать данные с сетевого диска либо по локальному пути MVC

491
23 марта 2017, 18:07

Пишу маленький проект с подключением файла с сетевого диска, при публикации на локальном ПК получаю исключение

System.IO.DirectoryNotFoundException: Не удалось найти часть пути

затем я решил в поле пути прописать явное подключение

string path = "\\\\192.168.0.2\\delete\\test.dat

и снова получаю исключение:

System.UnauthorizedAccessException: Отказано в доступе по пути \192.168.0.2\delete\test.dat

И как бы ясно что система требует логин пароль, я на MSDN нашел вот такой пример: в web.config добавляем :

  <configuration>
   <system.web>
      <identity impersonate="true" userName="192.168.0.2\Admin"
          password="pass123"//>
   </system.web>
</configuration>

И всеравно получаю ошибку, в которой сказано что такого пользователя и пароля не существует в системе, помогите пожалуйста решить проблему. Спасибо

Answer 1

Источник: en SO: How to provide user name and password when connecting to a network share

Попробуйте так, у меня работает

NetworkManager

public class NetworkManager : IDisposable
{
    private readonly string _networkName;
    public NetworkManager(string networkName)
    {
        _networkName = networkName;
        NetResource netResource = new NetResource
        {
            Scope = ResourceScope.GlobalNetwork,
            ResourceType = ResourceType.Any,
            DisplayType = ResourceDisplayType.Directory,
            RemoteName = networkName
        };
        int result = WNetAddConnection2(netResource, "ВАШ ПАРОЛЬ", "ВАШ ЛОГИН", 0);
        if (result != 0)
        {
            throw new Win32Exception(result);
        }
    }
    ~NetworkManager()
    {
        Dispose(false);
    }
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    protected virtual void Dispose(bool disposing)
    {
        WNetCancelConnection2(_networkName, 0, true);
    }
    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NetResource netResource, string password, string username, int flags);
    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string name, int flags, bool force);
}
[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
    public ResourceScope Scope;
    public ResourceType ResourceType;
    public ResourceDisplayType DisplayType;
    public int Usage;
    public string LocalName;
    public string RemoteName;
    public string Comment;
    public string Provider;
}
public enum ResourceScope
{
    Connected = 1,
    GlobalNetwork,
    Remembered,
    Recent,
    Context
}
public enum ResourceType
{
    Any = 0,
    Disk = 1,
    Print = 2,
    Reserved = 8,
}
public enum ResourceDisplayType
{
    Generic = 0x0,
    Domain = 0x01,
    Server = 0x02,
    Share = 0x03,
    File = 0x04,
    Group = 0x05,
    Network = 0x06,
    Root = 0x07,
    Shareadmin = 0x08,
    Directory = 0x09,
    Tree = 0x0a,
    Ndscontainer = 0x0b
}

Использование

using (NetworkManager network = new NetworkManager(@"\\192.168.0.2"))
{
    // ваш код с подключением
}
READ ALSO
Как подключить proxy в C#

Как подключить proxy в C#

Возник такой вопрос, как подключить прокси к авторизации в Вконтакте на 10 аккаунтов и болееКак сделать под один аккаунт я знаю как, но как...

288
Печать из нескольких источников формы

Печать из нескольких источников формы

Каким образом, можно вывести на печать сразу из нескольких полей? У меня на форме есть два combobox и один textboxПричем textbox с нестандартным шрифтом

243
C# Получить объект вызвавший getter свойства

C# Получить объект вызвавший getter свойства

Здравствуйте! У меня возникла проблема "красивого" способа изменения настроек "на лету"Наример:

298
Как заблокировать ячейку в phpexcel?

Как заблокировать ячейку в phpexcel?

Я использую библиотеку PHPExcelПробую заблокировать от редактирования ячейку вот так:

337