![](/img/trans.png)
[英]DirectoryInfo throws “Argument Exception: The path is not of a legal form” for the correct path
[英]var di = new DirectoryInfo(path) throws exception until I use Windows Explorer to open the path for a first time
var di = new DirectoryInfo(Root);
var diList = di.GetDirectories();
当访问网络上的文本路径“ Root”时,以上内容崩溃。 仅当用户首次登录Windows 7(未经其他操作系统测试)时,我才会发生。 如果用户使用Windows资源管理器导航到指定的路径,则di可以检索目录。
我知道可以进行捕获并提示用户单击打开Windows资源管理器并导航到路径的链接,但是我不是解决问题的人。 我希望我的程序能够建立与网络路径的连接,而无需Windows Explorer首先进行连接。
例外:
System.IO.IOException: The network name cannot be found.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path,string originalUserPath,
String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler,
Boolean checkHost)
at System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern,
SearchOption searchOption) at Controls.ValidationControl.LoadDBox(Object sender,
RoutedEventArgs e)
in c:\Controls\ValidationControl.xaml.cs:line 1010
约翰,谢谢您的支持。
Microsoft的安全性将阻止您使用应用程序捕获的凭据通过UNC访问SharePoint。 因此,在尝试了所有上述解决方案和其他3个网络访问类之后,没有人会看到该路径并让我登录,所以我只用了
Process.Start(dir);
并提示用户正在发生的事情。 Windows资源管理器将使用用户的凭据启动,并导航到Windows然后使用用户的域帐户登录SharePoint的路径。 Windows可以做到。 不适用于Microsoft的程序员不能。
既然您说过这是在网络文件夹上发生的,那么我的第一个倾向是,此应用程序在其下运行的Windows进程没有安全性访问权限来读取目录信息。 当用户浏览到该文件夹时,安全性便得到了验证,因此您的应用程序现在可以读取它。
如果Root是本地文件夹,则该应用程序可以正常工作吗?
最可能的原因似乎是用户需要登录才能访问网络路径。 在通过Explorer
访问路径之前,似乎不会发生这种情况。 尝试将网络文件夹映射为本地计算机上的驱动器,并将其设置为自动登录。 这可能会有所帮助。
编辑:-正如Scottie在另一个答案中指出的那样,程序在其下运行的凭据也可能需要访问共享文件夹。
EDIT#2:-您可以使用P/Invoke
传递凭据[Ref] 。 或者,你可以调用LogonUser
方法做模拟为解释在这里 。 有关模拟和LogonUser
更多详细信息,可以在此问题及其答案中找到 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.