#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