如何获取资源文件的路径?

3
我正在使用Visual Basic制作一个项目,其中有一个控件必须打开文件。我已经将该文件添加到项目的资源文件夹中,如果我将文件拖入代码中,我会得到完整路径,但当然这是在我的电脑上的完整路径,在任何其他电脑上都无法工作。
这是帮助文件,以下是代码:
Help.ShowHelp(Me, "help.chm")

如何获取相对路径,以便我的项目可以在任何计算机上正常工作?我尝试过以下方法,但它们都不起作用:

Help.ShowHelp(Me, "..\help.chm")
Help.ShowHelp(Me, "..\\help.chm")
Help.ShowHelp(Me, "..\\Resources\help.chm"")

编辑:我通过将文件添加到\bin文件夹中来解决了问题。然后这行代码就可以正常工作:

Help.ShowHelp(Me, "help.chm")

我已将此文件添加到项目的资源文件夹中。这是你的第一个错误。我希望人们在开始之前能先阅读相关资料。资源的整个意义在于它们不是文件,而是编译到程序集中的数据。如果你在项目属性的资源页面上添加了一个文件到资源中,那么该文件会被复制到资源文件夹中,并且在构建时,其内容会被编译到EXE或DLL中。如果你想在运行时使用一个文件,那么根据定义,它不是一个资源。在这种情况下,请不要使用资源文件夹,而是添加自己的文件夹。 - jmcilhinney
2个回答

1

首先,我建议您将文件添加到项目的资源部分时,应该从我的项目>资源部分进行操作。

enter image description here

enter image description here

现在进入代码部分: 要访问项目资源中的文件,您可以从My.Resources中获取它。
但请记住,这将为您提供一个字节数组而不是文件位置。您需要将此字节数组保存到文件中,然后在项目中使用此文件。
例如:
'A FileInfo object that will hold your help file FilePath
Dim helpFileLoc As FileInfo
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    'Access our help file from the Resources section and store the file as bytesarray
    Dim helpflbytes() As Byte = My.Resources.Application_form
    'Save the bytesarray to a real file (you can change the save path)
    File.WriteAllBytes(Application.StartupPath & "\appform.doc", helpflbytes)
    'Create a fileinfo object that will have the FilePath of your help file
    helpFileLoc = New FileInfo(Application.StartupPath & "\appform.doc")
End Sub

'When user clicks a button, your app will open your help file
Private Sub btnOpenFile_Click(sender As Object, e As EventArgs) Handles btnOpenFile.Click
    'Since helpFileLoc, the FileInfo object contains the path to your help file, you can start it as a process
    Process.Start(helpFileLoc.FullName)
End Sub

0
从问题来看,似乎你想要动态获取资源路径,以便在任何计算机上都能正常工作。你可以使用几种常用的方法来实现:
1. 使用Environment.GetEnvironmentVariable()方法来获取任何Windows系统中的相对路径。
假设你的应用程序将数据保存在%temp%路径下,那么你可以按照以下方式访问它:
Dim resourcePath As String = Environment.GetEnvironmentVariable("TEMP").ToString + "\Resources\help.chm"

或者,您也可以使用My.Computer.Filesystem.SpecialDirectories.Temp而不是获取环境变量。
假设您的应用程序正在保存文件到其对应的路径中,那么您可以使用以下代码来获取完整路径:
Dim resourcePath As String = My.Application.Info.DirectoryPath.ToString + "\Resources\help.chm```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接