nep*_*epa 10 .net c# windows networking
我们尝试访问网络目录中的目录但得到错误的结果(C#/ Windows):
var exists = Directory.Exists("Z:\\Sessions\\Data1");
Run Code Online (Sandbox Code Playgroud)
"Z"是网络目录,"Sessions"是记录软件不断创建目录(例如"Data1")并在其中放入一些数据的目录.似乎Windows缓存了关于Data1的错误状态:该方法返回false.但是当我通过资源管理器访问目录时,它就在这里.在使用Explorer访问目录后运行方法(Directory.Exists)时,它返回true.当然,我可以保证目录在第一次尝试时实际存在.
这种行为的原因是什么?我能做些什么呢?
编辑: 似乎Windows无法将网络驱动器连接到远程计算机.当我尝试使用资源管理器导航到目录时,它会自动尝试连接驱动器.
所以问题发生了变化: 是否有办法强制Windows尝试通过.NET重新连接?
解决方案: 重新连接断开的网络驱动器
我不确定上面的解决方案链接适用于哪个版本的mpr.dll,但我使用的是Win7,并且版本略有不同(尽管类似)。该入口点是:
[DllImport("mpr.dll", SetLastError = true, EntryPoint = "WNetRestoreSingleConnectionW", CharSet = CharSet.Unicode)]
internal static extern int WNetRestoreSingleConnection( IntPtr windowHandle,
[MarshalAs(UnmanagedType.LPWStr)] string localDrive,
[MarshalAs(UnmanagedType.Bool)] bool useUI);
Run Code Online (Sandbox Code Playgroud)
然后:
IntPtr hWnd = new IntPtr(0);
int res = WNetRestoreSingleConnection(hWnd, <your drive path>, false);
Run Code Online (Sandbox Code Playgroud)
您必须添加自己的错误检查/处理。
归档时间: |
|
查看次数: |
7557 次 |
最近记录: |