【问题标题】:Delete a single .txt file if exist in Visual Basic?删除单个 .txt 文件(如果存在于 Visual Basic 中)?
【发布时间】:2015-06-01 23:04:58
【问题描述】:

我一直在试图弄清楚如何删除一个不断更改名称的 .txt 文件,除了前 4 个 ex:THISTEXT-123-45.txt 其中 THISTEXT 保持不变但 -123-45 发生变化。

我找到了检测方法,但是不知道怎么删除。

Dim paths() As String = IO.Directory.GetFiles("C:\", "THISTEXT*.txt")
If paths.Length > 0 Then

有人知道删除那个特殊 .txt 文件的命令行吗? 我在 Visual Studio 2013 框架 3.5 上使用 Visual Basic。

【问题讨论】:

  • 仍在等待有关删除更改名称文件的答案,所有文件只有前4个字母相同。
  • @GUNNER 我认为让每个人都感到困惑的是,即使您的示例显示 THISTEXT*.txt,您仍然指的是单个文件(例如,下面 cmets 中的“那个文件”)。只有一个,您想删除它吗?或者,有很多并且您想将它们全部删除吗?或者,有很多并且您只想删除一个特定的吗?请澄清。
  • @GUNNER 现在可以了,请检查一下。

标签: vb.net visual-studio-2013


【解决方案1】:

使用 System.IO 的 Delete 方法。

假设你有 C:\

的写权限
Dim FileDelete As String

FileDelete = "C:\testDelete.txt"

 If System.IO.File.Exists( FileDelete ) = True Then
   System.IO.File.Delete( FileDelete )
   MsgBox("File Deleted")
End If

删除文件非常简单 - 但很危险!因此,在尝试此代码时要非常小心。

编辑 要删除所有文件,请使用 *(星号),后跟文件扩展名

示例C:\*.txt"

对于多个文件

Dim FileDelete As String

FileDelete = "C:\"

For Each FileDelete  As String In IO.Directory.GetFiles(FileDelete & "THISTEXT*.txt")
    File.Delete(FileDelete)
Next

【讨论】:

  • 您好!感谢您的快速回答,但是一旦我尝试声明“C:\”,“THISTEXT * .txt”它就不起作用,C:\ 工作,但是一旦我把“,”的其余文本保持黑色一条蓝线在说(需要标识符)Dim fyle As String = "C:\","THISTEXT*.txt"
  • @GUNNER 路径和文件名合二为一,不要分开使用。
  • 错误检查和异常处理很重要,但尝试教它们以及一次性删除文件的方法对于新程序员来说可能有点不知所措。我认为这个答案在回答具体问题方面做得很好。提问者将有很多机会学习正确的错误处理技术,而以后,这不是教他们的唯一机会。
  • @JasonC 我说的是奥马尔,而不是问题的 OP。 Omar 最初提供的代码是,实际上没有任何其他方式可以这么说,令人震惊的答案。当然,它按下了所有正确的按钮,但它没有使用 VB.NET 的正确功能,它基本上是伪代码。
  • 伙计们,我看到很多关于如何删除同名文件的解释。但这里真正的问题是如何删除一个从不具有相同名称的文件。(所以 FileToDelete = "C:\testDelete.txt" )对我无效。因为它永远不会是 testdelete.txt 因为它改变了,只有前 4 个字母是相同的。
【解决方案2】:

如果您阅读 GetFiles 上的 MSDN 页面,您会意识到您的路径数组中有文件名和路径。然后,您可以遍历删除匹配项的数组。

Dim x as Integer
Dim paths() as String = IO.Directory.GetFiles("C:\", "THISTEXT*.txt")
If paths.Length > 0 Then
    For x = 0 to paths.Length -1
        IO.File.Delete(paths(x))
    Next
End If

【讨论】:

  • 你真的需要先检查paths.Length > 0吗?
  • @Jason 不,没有必要,它只会失败。我只是一直养成在使用数组之前检查数组边界的习惯。
  • 你好 Mark Hall,当我执行你的代码时,它给了我这个错误:在 mscorlib.dll 中发生了“System.UnauthorizedAccessException”类型的未处理异常,向我展示了这部分代码:@987654325 @
  • 你必须没有权限删除根目录中的文件,这就是那个错误告诉你的,我在一个我有权限的子目录中测试了它。
  • 感谢找到它! <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 现在一切都好。祝你有美好的一天!
【解决方案3】:

根据您提供给Omar'sanswer 的反馈,您的文件路径和文件名似乎是分开的。

您不能提供它们以逗号分隔,因为逗号表示传递给子例程或函数的单独参数。

要解决此问题,您需要将它们连接起来,例如:

Dim fileName As String = "foo.txt"
Dim filePath As String = "C:\"

Dim FileToDelete As String = fileName + filePath

删除单个.*txt 文件(如果存在):

If (deleteFile("C:\")) Then 
    MsgBox("File deletion successful")
Else
        MsgBox("File couldn't be deleted with the following error: " + exception)
End If

也可以连接:

If (deleteFile("C:\") Then
    MsgBox("File deletion successful")
Else
        MsgBox("File couldn't be deleted with the following error: " + exception)
End If

Dim exception As String 'Place this at the beginning of your app's class.

    Dim path As String = "C:\"
    If (deleteFile(path)) Then
        MsgBox("File deletion successful")
    Else
        MsgBox("File couldn't be deleted with the following error: " + exception)
    End If

Private Function deleteFile(ByVal dir) As Boolean
    Dim fileToRemove As String
    Try
        Dim paths() As String = IO.Directory.GetFiles(dir, "THISTEXT*.txt")
        For i As Integer = 0 To paths.Length
            fileToRemove = paths(i).ToString
            System.IO.File.Delete(fileToRemove)
            If (Not System.IO.File.Exists(fileToRemove)) Then
                Return True
            Else
                exception = "Unknown error."
                Return False
            End If
        Next
        Return False
    Catch ex As Exception
        exception = ex.Message
        Return False
    End Try
    Return False
End Function

上述函数检查文件是否存在,如果存在则尝试删除它。如果文件无法删除,或者发生错误(已处理),函数返回False

【讨论】:

  • 如果您想以除该消息框之外的方式呈现错误,或者在具有自己呈现错误方式的多个上下文中重用此代码,该怎么办?
  • @JasonC 这是一个简单的问题,使用代码的人可以适应。就像将错误存储在变量中一样简单,或者调用另一个子程序来处理错误。
  • 我想“错误处理是一个简单的事情,使用代码的人可以适应”对于其他答案的 cmets 也是一个很好的回应!总之,进步不错。现在,如果您想根据文件不存在还是无法删除来显示更多信息错误怎么办?
  • @JasonC 正在考虑添加,现在将添加。
  • 有趣的方法。如果您想从多个线程执行此操作怎么办?您是否建议使用更高范围的变量来存储错误消息而不是抛出异常?这是最好的技术吗?这可能会在更复杂的应用程序中变得混乱吗?
【解决方案4】:

简单示例:

    For Each path As String In IO.Directory.GetFiles("C:\", "THISTEXT*.txt")
        Try
            System.IO.File.Delete(path)
        Catch ex As Exception
            MessageBox.Show(path, "Unable to Delete File")
        End Try
    Next

【讨论】:

  • 现在我看到了一些结果,但我收到消息框,说它无法删除 .txt 文件……唉,这太糟糕了
猜你喜欢
  • 1970-01-01
  • 2019-02-13
  • 2020-08-09
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多