【问题标题】:VB6 get filename from pathVB6从路径获取文件名
【发布时间】:2015-04-22 07:54:56
【问题描述】:

在我的 VB6 代码中我有声明

Open CommonDialog.FileName For Input As #intFileNum

问题是 CommonDialog.FileName 返回一个完整的路径,而 VB6 Open 命令只需要一个文件名。例如,如果路径是 C:\temp\file_name.csv,那么 CommonDialog.FileName 将返回 C:\temp\file_name.csv 但 VB6 中的此 Open 语句仅适用于 file_name.csv

我可以放

Dim Path As String
Path = CommonDialog.FileName
Open Path For Input As #intFileNem

我只需要知道如何删除 Path 中最后一个反斜杠“\”之前的所有内容。 VB6 库中有什么东西可以做到这一点吗?

路径是从普通对话框和代码中绘制的

CommonDialog.DialogTitle = "Browse. . ."
    CommonDialog.Filter = "CSV File (*.csv)|*.csv"
    CommonDialog.ShowOpen

所以我想如果有人知道,我可能应该问,使用 ShowOpen 获取公共子目录中的路径,然后在稍后的函数中使用带有 Open 命令的路径中的文件名本身并不是任何问题对吧?

为了便于阅读,我必须在此处显示 Ghost。我使用 intFileNum 作为一个 long

Dim intFileNum As Long

Open Path1 For Input As #intFileNum

Do Until EOF(intFileNum)

Line Input #intFileNum, LineEnd

希望这些信息可以使情况更有意义

【问题讨论】:

  • 我一直使用完整路径+文件名来打开文件。并不是说不能只使用文件名,而是必须将当前工作目录设置为文件所在的文件夹;不这样做将导致有趣的错误追查。
  • 好的,我收到错误 52 bad file name or number MSDN 说“名称必须以字母或数字开头。它可以包含任何大写或小写字符(文件名不是区分大小写),但以下字符除外:引号 (")、撇号 (')、斜杠 (/)、反斜杠 ()、冒号 (:) 和竖线 (|)。” 当然,我尝试对测试进行硬编码要调试的文件名并得到相同的错误
  • 以及如何定义#intFileNem。你在使用 FreeFile 吗?
  • 所以也许 VB6 与我在问题的第二部分中提到的我所做的事情有一个单独的问题,并给了我错误的错误,或者只是在 MSDN 上不够清楚。我不认为我已经做了任何事情来关闭作为错误 52 的另一部分的文件。不确定我是否应该将它作为一个单独的问题发布,但它非常令人困惑且难以调试
  • #intFileNume 定义为 long 后只是 long

标签: csv path vb6 filenames


【解决方案1】:
Function GetFileNameFromPath(strFullPath As String) As String
    GetFileNameFromPath = Right(strFullPath, Len(strFullPath) - InStrRev(strFullPath, "\"))
End Function

但是,您的问题是由于您未使用 FreeFile 或未关闭文件而导致文件被锁定。

Public Function SomeMethod()
    On Error GoTo errSomeMethod

    Dim lngFileHandle As Long

    lngFileHandle = FreeFile
    Open CommonDialog.FileName For Input As #lngFileHandle

    'Whatever you want here

    Close #lngFileHandle

    Exit Function
errSomeMethod:
    Close #lngFileHandle
End Function

【讨论】:

  • 这行得通,问题是 Freefile 而不是路径。谢谢!
【解决方案2】:

要回答实际的原始问题:

手册里有,见FileTitle Property

换句话说,这项工作已经为您完成了……假设您确实需要它。但这是另一个问题。

【讨论】:

    【解决方案3】:

    没有内置任何东西,但是解析字符串很简单。

    这是一个方便的功能。

    Function ExtractFile(ByVal PathName As String) As String
        Dim f As String
        Dim n As Integer
    ' Return the filename portion of a full pathname
    
        f$ = PathName
    
        Do
            n% = InStr(f$, "\")
            If n% > 0 Then f$ = Right$(f$, Len(f$) - n%)
        Loop While n% > 0
    
        Do
            n% = InStr(f$, "/")
            If n% > 0 Then f$ = Right$(f$, Len(f$) - n%)
        Loop While n% > 0
    
        ExtractFile = f$
    
    End Function
    

    【讨论】:

    • 循环查找文件名? :(
    • 猜测是因为你没有使用 instrrev。
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 2012-01-21
    • 2014-07-24
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多