【问题标题】:Why Is A FilePath Item With ~$ Added To ListBox为什么将带有 ~$ 的 FilePath 项添加到 ListBox
【发布时间】:2020-07-24 15:11:54
【问题描述】:

我正在将文件夹中的文件路径添加到列表框,然后在富文本框中将其作为文本打开。我在另一个列表框中使用了与下面代码相同的语法来实现相同的目的,它工作得很好。但是,在当前示例中,我在默认 MyProjects 文件夹中有两个文件(即默认文件夹由我的应用程序创建),但是当我将文件夹中的文件路径作为项目添加到列表框中时,我得到第三个项目~$ 在文件路径中?这一项显然是列表中第一个文件路径的某种重复?默认文件夹中的两个文件也是由我的应用程序创建的,因此,如果这是文件访问问题,我不明白为什么我无法访问我的应用程序创建的文件?谁能告诉我这里发生了什么?

我的尝试:

我已尝试调试以检查额外文件路径的来源。据我所知,它是在我将文件路径添加到列表框时创建的?即注释掉将项目添加到列表框中的代码会停止添加所有项目,但不会告诉我这个额外项目来自哪里?

“额外物品”问题:

System.Windows.Forms.ListBox+ObjectCollectionC:\Users\username\Documents\MySolution\MyProjects\RTFdoc.rtf C:\Users\用户名\Documents\MySolution\MyProjects\Testdoc.rtf C:\Users\用户名\Documents\MySolution\MyProjects~$Fdoc.rtf

守则:

lbxName.Items.AddRange(Directory.GetFiles("C:\Users\" + username + "\Documents\MySolution\MyProjects"))
lbxName.SelectedIndex = 0

加载代码:

For Each item In lbxName.SelectedItems
    RTB.LoadFile(lbxName.SelectedItem, RichTextBoxStreamType.RichText)
Next

【问题讨论】:

  • 它只是为您提供存在的文件。如果您不想要“额外”文件,请将其删除。首先弄清楚为什么要生产它并防止这种情况发生。 GetFiles() 调用在这里没有失败...
  • 此文件(很可能)是您用来修改或创建该 .rtf 的编辑器使用的隐藏文件。此文件包含有关哪个用户打开了文件以及与 SO 信息关联的设置的信息。启用隐藏文件可视化(在文件夹选项中)以查看是否是这样,和/或由创建这些文件的编辑器正确打开/关闭或手动删除。
  • 嗨 Idle_Mind,我问这个问题的原因是因为在我的代码中调试并寻找可能的解决方案后,我无法“弄清楚为什么......”正在生成额外的文件!正如您在我对 G3nt_M3caj 的回复中所看到的,该文件不是文件资源管理器中的隐藏文件!
  • “我正在将文件夹中的文件路径添加到列表框,然后在富文本框中将其作为文本打开。”您如何将文件加载到 RicthTextBox 中?我从未真正看过,.Net 的RichTextBox.LoadFile() 是否创建了临时文件?
  • 嗨 G3nt_M3caj,我在 FE 中启用了隐藏文件,但该文件没有出现在文件夹中。我猜它可能是在将项目添加到列表框时生成的某种临时文件?但是,虽然我可以将此文件路径视为列表框中的第三项并在调试中获得文件路径(即根据我上面的示例),但我不知道如何调试以发现额外文件的来源或如何防止创建文件?我从富文本框生成 RTF 标记,保存到 .rtf 文件,将文件作为 RTF 标记打开并转换回生成 RTB 内容,即图像和文本。

标签: vb.net listboxitem


【解决方案1】:

我无法重现以下代码中的错误。

Private Sub FillListBox()
    ListBox1.Items.AddRange(Directory.GetFiles("C:\Users\" & username & "\Documents\MySolution\MyProjects"))
    ListBox1.SelectedIndex = 0
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    FillListBox()
End Sub

请阅读以下代码中的cmets。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each item In ListBox1.SelectedItems
        'The following will overwrite the contents of the RichTextBox on each iteration
        'This overload of LoadFile will only handle .rtf files
        RichTextBox1.LoadFile(item.ToString)
    Next
End Sub

我建议您在设计器中将SelectionMode 属性设置为One 并执行以下操作。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    RichTextBox1.LoadFile(ListBox1.SelectedItem.ToString)
End Sub

【讨论】:

    【解决方案2】:

    尝试如下使用:

    Directory.GetFiles("C:\Users\" & username & "\Documents\MySolution\MyProjects").Where(Function(f)
    Return New IO.FileInfo(f).Attributes & IO.FileAttributes.Hidden & IO.FileAttributes.System = 0
    

    【讨论】:

    • 嘿G3nt_M3caj,试过了,但没有得到任何结果?此外,我尝试删除默认 MyProjects 文件夹中的文件并使用我的应用程序创建新文件。但是,即使这个文件不再在文件夹中,之前的文件路径仍然出现(即 C:\Users\username\Documents\MySolution\MyProjects~$Fdoc.rtf)???所以,我猜这个问题不是由文件本身引起的吗?新文件没有创建类似的文件路径?
    • 当我使用该路径打开文件时,它会抛出异常:“文件格式无效。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多