搜索文本文件以查看是否存在字符串

时间:2012-04-10 17:26:48

标签: vb.net

我是编程的新手,所以我先生道歉。

因此,我正在尝试创建一个Win App,以便使用Robocopy更轻松地复制文件,最终完成其他任务。基本上我到目前为止是一个调用Sub Robcopy_EXE的Button。表单上有一个选项卡,其中包含100个复选框,每个终端一个,由用户指定,复选框用于确定是否需要Robocopy提供详细报告。我还有一个文本框供用户输入站点IP地址的前3个八位字节。复选框和输入字段用于创建字符串" Terminal_input"这是在CMD中运行Robocopy的原因。 Robocopy将其进度记录到我标记为" Status.txt"的文本文件中。就我而言,就是这样。

此时我需要知道当前正在运行的更新何时进行到下一个终端。我想继续阅读" Status.txt"提交并查找单词" ENDED"进入下一个终端。如果单词" ENDED"不存在我想将LABEL3更新为"更新终端"

最终我希望有一种方法可以使复选框#变量随着每个复选框#的进展而递增,但在我弄清楚如何检查1个终端是否完成之后我会搞砸。

就像我说我是编程新手一样,我很有兴趣搞清楚这一点,但我对这个程序感到非常难过,我会以最糟糕的方式解决这个问题:D

先谢谢。

   Private Sub RoboCopy_EXE()
        Dim Robocopystart = "Robocopy C:\wtg\update \\"
        Dim Robocopymid = IP_Input.Text
        Dim Robocopyend = ".42\c$\wtg /E /copy:datsou /r:3 /w:20 /log+:status.txt /tee /ns /nc /nfl /"
        Dim Terminal_Input = Robocopystart + Robocopymid + Robocopyend
        If CheckBox10.Checked Then
            If RoboCopy_Detailed_Progress.Checked = True Then
                Shell("CMD.exe", vbNormalFocus)
                Threading.Thread.Sleep(400)
                SendKeys.SendWait(Terminal_Input)
                Label3.Text = items
            Else : RoboCopy_Detailed_Progress.Checked = False
                Shell("CMD.exe", vbNormalFocus)
                Threading.Thread.Sleep(500)
                SendKeys.Send("Test2")
            End If
        End If
    End Sub

2 个答案:

答案 0 :(得分:0)

可能有更好的方法(甚至更好的方式!)来做到这一点。但是为了方便起见,你应该阅读一个定时器控件,并每秒执行一次,并检查文件的状态。并阅读最后一行并将其与您要查找的那一行进行比较。

答案 1 :(得分:0)

这些日志文件有多大?你可以按照

的方式做点什么
While true
    Dim sr as new StreamReader(fileName)
    Dim contents as String = sr.ReadToEnd()
    sr.Close
    ForEach(string line in contents)
        if (line = "ENDED") then
            exit While
        Endif
    Next
    Thread.Sleep(1000)
Loop

(原谅任何语法错误,写在我的头顶,我现在主要是C#)

虽然您可能应该通过一些错误处理和一种摆脱循环的方式来加强它,所以它不会永远循环(如果它出错100次退出?)。

此外,您应该将所有内容放在BackGroundWorker上,这样它就不会锁定UI(否则会发现更新标签和其他问题)。

最后,不是100个复选框(哎呀!),也许是一个动态生成的列表框,带有选中的项目,或者是一个类似的DataGridView?您可以通过这种方式遍历已检查的项目。