为文本保存设置正确的文件路径 - vb.NET [重复]
Posted
技术标签:
【中文标题】为文本保存设置正确的文件路径 - vb.NET [重复]【英文标题】:Setting Correct Filepath for a txt Save - vb.NET [duplicate] 【发布时间】:2013-03-31 00:00:11 【问题描述】:好的。我觉得这应该是编程 101,但我似乎找不到关于如何将文件路径名设置为足够动态以明确设置到安装 exe 的位置的正确答案。
基本上,这个应用程序实际上将安装在用户个人文件夹中,可能类似于本地数据,我需要获取一个由程序创建的 txt 文件,该文件要创建到与可执行文件相同的目录中。
当前路径:
Dim strFilePath As String = "D:\Development\Bobby\Prototyping\Replication Desktop Client\Replication_Desktop_Client\ClientAccessList.txt"
我想把它设置成类似
Dim strCurrentLocationOfEXE As String = HardDriveLetter & Users & CurrentUserPath & InstalledDirectory
Dim strFilePath As String = strCurrentLocationOfEXE & "\ClientAccessList.txt"`
但我一生都无法弄清楚如何让它确定,因为它不会总是安装到同一个文件夹中(即用户名和硬盘驱动器号可能会不同)。
想法?
【问题讨论】:
您需要查找特定于操作系统的环境变量...在这里查看介绍:en.wikipedia.org/wiki/Environment_variable 让我通过询问来更改它,这是否可以将 txt 文件保存在用户漫游应用程序数据文件夹中,并且它是否也可以正确创建 Replication Client 文件夹?Dim strCurrentAppDataPath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData & "\Replication Client") Dim strFilePath As String = strCurrentAppDataPath & "\ClientAccessList.txt"
如果您想创建一个新文件夹,您需要在单独的步骤中明确创建它。最好使用Path.Combine
,而不是自己直接串联路径。
知道了,我就是这么想的。是否有理由使用 path.combine 比自己连接它更好?
连接肯定会起作用,只是Path.Combine
为您提供了额外的抽象层,以防路径格式与当前操作系统中的预期格式不同。例如,有人可能会在 Mono 下的 linux 机器上运行您的应用程序,在这种情况下,应该使用正斜杠而不是反斜杠。这没什么大不了的,但这只是一种好习惯。
【参考方案1】:
您可以获取程序集运行的路径
Dim fullPath = System.Reflection.Assembly.GetExecutingAssembly().Location
Dim folderName = Path.GetDirectoryName( fullPath )
Dim strFilePath = Path.Combine(folderName, "ClientAccessList.txt")
如果您想引用此应用程序的当前用户个人文件夹,则可以通过 Environment.SpecialFolder 枚举。 此枚举独立于底层操作系统(XP、Win7、x64、x32 等) 在这种情况下,您可以使用:
Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim strFilePath = Path.Combine(fullPath, "your_app_reserved_folder", "ClientAccessList.txt")
在此示例中,"your_app_reserved_folder"
应该是在安装应用程序期间创建的文件夹,您可以在其中放置每个用户的数据文件。 (通常这是推荐的存储数据文件的方法,应该由用户分开)
如果您想在尝试使用之前检查文件夹是否存在,只需将获取文件名的逻辑封装在方法中
Public Function GetUserAppClientAccessList() As String
Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
Dim appFolder = Path.Combine(fullPath, "your_app_reserved_folder")
if Not Directory.Exists(appFolder) then
Directory.Create(appFolder)
End If
return = Path.Combine(appFolder, "ClientAccessList.txt")
End Function
【讨论】:
好的,所以我对我的问题有一个更改。看看问题cmets 这可以返回程序集运行的路径。它可能与当前用户的漫游或本地文件夹不同。如果您想要用户文件夹中的独立路径,那么要走的路是 Environment.SpecialFolder 枚举 嗯...所以我想我不希望将 txt 文件保存到程序集位置,只是在用户漫游的 appdata 中。我需要知道的是,在尝试设置文件夹数据路径之前,我是否还必须创建逻辑来检查文件夹“复制客户端”是否存在?或者如果它不存在它会自动创建...? 不,正如我所说,该文件夹不会因为您引用它而自动存在。但是检查文件夹是否存在非常简单。【参考方案2】:这将为您提供可执行文件的文件路径:
Assembly.GetEntryAssembly().Location
然后要获取文件夹路径,可以调用Path.GetDirectoryName
。因此,要获取文本文件路径,您可以执行以下操作:
Dim exeFilePath As String = Assembly.GetEntryAssembly().Location
Dim exeFolderPath As String = Path.GetDirectoryName(exeFilePath)
Dim filePath As String = Path.Combine(exeFolderPath, "ClientAccessList.txt")
但要注意一点:如果没有 .NET 程序集可执行文件(例如通过 COM 将代码作为库调用),Assembly.GetEntryAssembly
可以返回 Nothing
。在这种情况下,您可能希望通过调用Environment.GetCommandLineArgs()(0)
从命令行使用可执行文件路径。如果由于某种原因失败了,您可以随时求助于Directory.GetCurrentDirectory()
。
【讨论】:
好的,所以我对我的问题有一个更改。看看问题cmets 我想我宁愿将它保存在 appdata 文件夹中,但我只需要它足够动态以获取正确的用户 appdata 漫游文件夹...以上是关于为文本保存设置正确的文件路径 - vb.NET [重复]的主要内容,如果未能解决你的问题,请参考以下文章