Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 创建文件夹并验证路径是否正确_Vb.net - Fatal编程技术网

Vb.net 创建文件夹并验证路径是否正确

Vb.net 创建文件夹并验证路径是否正确,vb.net,Vb.net,我想在VB.NET应用程序中创建一个文件夹,但无法验证路径是否正确。例如,如果我输入 My.Computer.FileSystem.CreateDirectory("lol it will work") 它是有效的。。。虽然它看起来根本不像文件夹路径。。。如何验证输入的路径是否正确?由于它不会引发任何异常,所以必须在某个地方创建文件夹,但在哪里?我找不到它 谢谢您的目录名“lol it will work”是一个有效的名称 如果不提供显式路径,My.Computer.FileSystem.Cr

我想在VB.NET应用程序中创建一个文件夹,但无法验证路径是否正确。例如,如果我输入

My.Computer.FileSystem.CreateDirectory("lol it will work")
它是有效的。。。虽然它看起来根本不像文件夹路径。。。如何验证输入的路径是否正确?由于它不会引发任何异常,所以必须在某个地方创建文件夹,但在哪里?我找不到它

谢谢

您的目录名“lol it will work”是一个有效的名称

如果不提供显式路径,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"))

警告: 由于这些对象的可写性,您的应用程序 可以随时更改当前目录

考虑:

  • 使用替代对象/变量获取工作目录或类似目录
  • 仅使用显式路径
  • 在启动时使用存储CurrentDirectory的全局/静态变量(很容易失败)
  • 无论何时更改CurrentDirectory,都要还原它(尽管将在某个时间或另一个时间使用更改CurrentDirectory而不发出警告的对象-无论何时涉及目录操作,都要阅读该对象的文档;例如OpenFileDialog,它在XP和Win7/8上具有不同的行为)-这是最不推荐的举措

候补: AppDomain.CurrentDomain

AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.GetParent(Assembly.GetExecutingAssembly().Location)
这是一个只读属性。它返回从中加载程序集(应用程序)的目录的路径小心此路径有一个尾随的
“\”
类似:

G:\Tools\...\Sources\bin\Debug\   ' <- !!!
这还将返回加载程序集的目录的路径,但由于使用了
GetParent()

在处理并非所有程序集都从同一目录加载的依赖关系时,使用
Assembly
检索路径非常有用。使用相对路径的代码应使用此方法,而不是传统方法


如果您想深入研究多线程,我假设同样的情况也适用于线程域(虽然我不确定这个假设的相关方面——从未使用过这个!)


还有好的
应用程序。StartupPath

Application.StartupPath ' ReadOnly

…它还有一个尾随的
“\”
。在应用程序实际启动之前,您无法访问StartupPath!但是,我从未检查过当您从应用程序启动另一个进程并通过另一个进程使用该进程时,它是否工作正常。。。(如果可能……只是想象一下)

请阅读应用程序的“当前工作目录”。这个目录名也没有什么无效的地方。你可以更改问题的标题,比如“如何知道相对I/O路径的使用是否得到正确解决”Omg对于这样一个简单的问题来说,这是一个很好的答案^ ^非常感谢,我现在完全理解了为什么它有效,而我认为它不会。现在我编写了一个函数来验证它是否是一个好的绝对路径。非常感谢:)希望你没有花太多的时间来写这些。
Application.StartupPath ' ReadOnly