VB.NET System.IO.File.Копировать вопрос

#vb.net

#vb.net

Вопрос:

Я использую System.IO.File.Копировать, чтобы скопировать файл в c $ на удаленном сервере. Мне нужно указать имя пользователя / пароль для подключения. Есть ли простой способ сделать это? Я надеялся, что System.IO.File.Copy принял бы учетные данные в качестве аргумента, но это не так. Как я могу это сделать?

Ответ №1:

Вы не можете добавить учетные данные в system.io.file, но, похоже, здесь есть обходной путь:http://forums.asp.net/t/1283577.aspx/1

Фрагмент из ссылки выше:

 using (System.Security.Principal.WindowsImpersonationContext ctx = System.Security.Pricipal.WindowsIdentity.Impersonate(userTokenptr))

{
 //do your IO operations
 ctx.Undo();     
}
  

Преобразовано в vb.net:

 Using ctx As System.Security.Principal.WindowsImpersonationContext = System.Security.Pricipal.WindowsIdentity.Impersonate(userTokenptr)
    'do your IO operations       
     ctx.Undo()
End Using
  

Кредиты получает Ганешиб

Комментарии:

1. Спасибо. И ВАУ. Это невероятно сложно для чего-то, что, очевидно, должно быть встроенной функцией метода копирования. Это единственный способ? Я просто должен верить, что MS подумала бы об этом и включила гораздо более простой способ.

2. Также проверьте это: msdn.microsoft.com/en-us/library/6485ct6t (против 71).aspx (для более сложных вещей) 🙂

3. И вот еще одно решение: social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread /…

4. Если какой-то из примеров вам подходит, просто опубликуйте его как полный ответ здесь.

5. Система. Диагностика. Процесс. Запустить(«net», «use \» amp; strComputer amp; «c$ /USER:» amp; strUsername amp; » » amp; strPassword)

Ответ №2:

Самое простое, что можно сделать, это добавить эту процедуру в свой код, а затем вызвать ее прямо перед вашим файлом.Копировать:

 Private Sub Open_Remote_Connection(ByVal strComputer As String, ByVal strUsername As String, ByVal strPassword As String)
    '//====================================================================================
    '//using NET USE to open a connection to the remote computer
    '//with the specified credentials. if we dont do this first, File.Copy will fail
    '//====================================================================================
    Dim ProcessStartInfo As New System.Diagnostics.ProcessStartInfo
    ProcessStartInfo.FileName = "net"
    ProcessStartInfo.Arguments = "use \" amp; strComputer amp; "c$ /USER:" amp; strUsername amp; " " amp; strPassword
    ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
    System.Diagnostics.Process.Start(ProcessStartInfo)

    '//============================================================================
    '//wait 2 seconds to let the above command complete or the copy will still fail
    '//============================================================================
    System.Threading.Thread.Sleep(2000)
End Sub