如何获取MS Access MDB文件的DataDirectory路径

时间:2017-12-01 00:43:27

标签: vb.net

我有代码要求用户提供文件夹路径,然后将MDB文件复制到该文件夹​​进行备份。但是,MDB正在从错误的文件夹中复制。如何修复它以便在备份和恢复MDB时使用正确的数据文件夹?

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
    Try
        Dim fbd As New FolderBrowserDialog
        If fbd.ShowDialog() = vbOK Then
            System.IO.File.Copy("MHC.mdb", fbd.SelectedPath & "\MHC.mdb")
            MsgBox("Done")
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub btnRestore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRestore.Click
    Try
        Dim fbd As New FolderBrowserDialog
        If fbd.ShowDialog() = vbOK Then
            File.Delete("MHC.mdb")
            System.IO.File.Copy(fbd.SelectedPath & "\MHC.mdb", "MHC.mdb")
            MsgBox("Done")
            Application.Restart()
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

1 个答案:

答案 0 :(得分:1)

  

是的,我想知道DataDirectory路径。

与此示例类似的连接字符串中使用的 | DataDirectory | 路径占位符:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Northwind.MDB

可以使用与此类似的代码检索

Dim objDataDir As Object = AppDomain.CurrentDomain.GetData("DataDirectory")
Dim dataDirectory As String = TryCast(objDataDir, String)

请注意,上述代码可以为Nothing返回dataDirectory(null)。我所知道的唯一设置“DataDirectory”的场景是使用ClickOnce发布的应用程序。

如果dataDirectory为空,那么您可能希望为其分配Application.StartupPath属性。

我不知道任何官方文档说明这是正确的程序,但代码是基于ExpandDataDirectory method

DataDirectory对象上还有一个非公开范围的AppDomain.CurrentDomain.ActivationContext属性,但您需要使用反射来检索该属性。

请注意,如果您想使用|DataDirectory|占位符,但将其指向您选择的路径,则可以使用:

AppDomain.CurrentDomain.SetData("DataDirectory", "your path here")