非常感谢 Shaihi,你让我走上了正轨。
您提供的代码和链接最终使我得到了以下对我来说很好的解决方案:
[DllImport("coredll.dll")]
private static extern int WNetAddConnection3(IntPtr hWndOwner,
ref NetResource lpNetResource, string lpPassword, string lpUserName, int dwFlags);
[DllImport("coredll.dll")]
static extern int WNetCancelConnection2(string lpName, Int32 dwFlags, bool bForce);
...
try
{
NetResource logsResource = new NetResource();
logsResource.lpLocalName = "logs";
logsResource.lpRemoteName = @"\\server\logs";
logsResource.dwType = 0x1; //const int RESOURCETYPE_DISK = 0x1
logsResource.dwScope = 0;
logsResource.dwUsage = 0;
logsResource.dwDisplayType = 0;
//try to connect the network resource
WNetAddConnection3(new IntPtr(0), ref logsResource, @"pass", @"dom\user", 0);
//copy files to the server
string[] logfiles = Directory.GetFiles(@"\System\Logs\");
foreach (string logfile in logfiles)
{
File.Copy(logfile, @"\network\logs\" +
logfile.Substring(logfile.LastIndexOf(@"\") + 1), true);
}
}
catch
{
}
finally
{
//try to disconnect network resource
WNetCancelConnection2("logs", 0, false);
}
两个 WNET 函数调用返回一个整数值。如果此值等于 0,则操作成功完成。我遇到的常见代码是 53 和 85。请参阅此 列表以了解数字的含义!