我想在我的VB .NET应用程序中创建一个文件夹,但我无法验证路径是否正确。例如,如果我输入
My.Computer.FileSystem.CreateDirectory("lol it will work")
它有效...虽然它看起来根本不像文件夹路径...如何验证输入的路径是否正确?并且由于它不会抛出任何异常,因此必须在某处创建文件夹,但在哪里?我找不到......
谢谢
答案 0 :(得分:2)
您的目录名称“大声笑它将起作用” 是 有效名称。
当您不提供显式路径时,My.Computer.FileSystem.CreateDirectory()(以及其他一些方法/函数)将假设您提供的字符串是 相对路径 是应用程序的当前目录。
因此,无论您是传递完整路径(看起来像是有效的文件夹路径)还是部分路径/文件夹名称都无关紧要与应用程序的目录相关联,只要:
那么,您如何知道您的应用程序当前的工作路径?
由于您使用了My.Application.FileSystem:
My.Computer.FileSystem.CurrentDirectory ' Read/Write Property As String
您可以使用System.IO:
System.IO.Directory.GetCurrentDirectory() ' Get a String
System.IO.Directory.SetCurrentDirectory(NewPath) ' Set
您也可以使用System.Environment.Directory
Environment.CurrentDirectory ' Read/Write Property As String
三者(My.Computer.FileSystem,System.IO.Directory和Environment)都是可写的,如果您在应用程序中提供相对路径,则返回要解析的当前目录。
所以,回答你的问题:“如何验证输入的路径是否正确?”
如果您刚刚创建了目录并且没有异常,那么您的(相对)目录的名称是有效的,并且已创建目录:
My.Computer.FileSystem.CreateDirectory("lol it will work")
' Verification :
If System.IO.Directory.Exists("lol it will work") Then
MessageBox.Show("The Directory has been created !")
Else
MessageBox.Show("The Directory has'n been created !")
End If
' Shows "The Directory has been created !"
所以你知道,即使其他函数/方法也可以通过回退到应用程序的已定义的相对工作路径来解析相对路径(不是全部)。
以上测试与以下相同:
System.IO.Directory.Exists( _
Path.Combine(Environment.CurrentDirectory, "lol it will work"))
注意:
由于这些对象的可写性,您的应用程序 可以 随时更改当前目录 。
考虑一下:
<强> AppDomain.CurrentDomain 强>
AppDomain.CurrentDomain.BaseDirectory
这是一个ReadOnly属性。它返回加载程序集(应用程序)的目录的路径。 警告!此路径的结尾为"\"
,如:
G:\Tools\...\Sources\bin\Debug\ ' <- !!!
<强> Assembly.GetExecutingAssembly()。位置强>
System.IO.Directory.GetParent(Assembly.GetExecutingAssembly().Location)
这也将返回加载程序集的目录的路径,但由于使用了"\"
而没有尾随GetParent()
使用Assembly
检索路径非常有用,当您处理依赖项时,并非所有程序集都从同一目录加载。使用相对路径的代码应该使用此方法而不是经典方法。
我假设同样适用于Thread Domain,如果你想深入了解多线程(虽然我不确定这个假设的相关方面 - 从未使用过这个!):
Thread.GetDomain().BaseDirectory ' ReadOnly
好老Application.StartupPath
Application.StartupPath ' ReadOnly
...也有一个尾随"\"
。在应用程序实际启动之前,您无法访问StartupPath!但是,当你从你的应用程序启动另一个进程并通过另一个进程使用它时,我从来没有检查它是否运行正常...(如果它可能......只是想象)