VB.NET获取在我的程序中打开的文件的目录

时间:2015-12-31 03:24:40

标签: vb.net

我有这样的代码,以便所有带有“.whatever”扩展名的文件随我的程序打开:

If Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(".whatever\shell\open\command", True) Is Nothing Then
    Dim icotouse As String = Path.GetTempPath() & "\whatever.ico"
    My.Computer.Registry.ClassesRoot.CreateSubKey(".whatever").SetValue("", "whatever", Microsoft.Win32.RegistryValueKind.String)
    My.Computer.Registry.ClassesRoot.CreateSubKey("whatever\shell\open\command").SetValue("", Application.ExecutablePath, Microsoft.Win32.RegistryValueKind.String)
    My.Computer.Registry.ClassesRoot.CreateSubKey("whatever\DefaultIcon").SetValue("", icotouse)
End If

现在,当用户双击“.whatever”文件时,它将在我的程序中打开。

当我在程序中打开它时,如何获取“.whatever”文件所在的目录?例如,用户单击其桌面上的文件[C:\ Users \ Example \ Desktop \ file.whatever],当他们单击它时,它会在我的程序中打开,我可以为该目录分配一个变量名吗?

2 个答案:

答案 0 :(得分:1)

首先,您需要让Windows将文件的路径传递给您的程序。这是通过将%1添加到command密钥的默认值来完成的。

将创建command密钥的代码更改为:

My.Computer.Registry.ClassesRoot.CreateSubKey("whatever\shell\open\command").SetValue("", Application.ExecutablePath & " %1", Microsoft.Win32.RegistryValueKind.String)

其次,要获取发送到您的程序的文件的路径,您可以使用例如Environment.GetCommandLineArgs()

将此放在Form_Load事件中的某处:

Dim Arguments() As String = Environment.GetCommandLineArgs()

If Arguments.Length > 1 Then 'If there's more than one argument, it means that something (like a file) was passed to your application.

End If

现在,If - 语句检查参数是否已发送到您的应用程序。要获取文件的路径,您只需将其中的内容放入其中:

Dim FilePath As String = Arguments(1)
'Will give you for example: C:\Users\Example\Desktop\file.whatever

但是如果你想获取文件的目录,可以执行以下操作:

Dim FileDirectory As String = IO.Path.GetDirectoryName(FilePath)
'Will give you for example: C:\Users\Example\Desktop

答案 1 :(得分:0)

您需要获取命令行参数

你可以用这样的东西做到这一点

Dim arguments As String() = Environment.GetCommandLineArgs()
Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments))

您也可以查看此MSDN链接

https://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs(v=vs.110).aspx