VB.net检查(在循环中)某些文件夹中是否存在.xml文件,并分别进行处理

时间:2019-02-13 20:29:35

标签: xml vb.net

我有一个文件夹,其中有一个软件生成随机XML数据文件和几个扫描的图像(在.xml中链接)。我需要根据.xml中的数据对这些图像进行排序。唯一的问题是.xml文件具有随机名称。我只是想不通一种方法来检查该特定文件夹中是否有没有文件名的xml文件。而且我需要一个循环运行的代码,直到按下停止按钮为止。

我尝试制作一个开始按钮“ Button3”,单击该按钮会触发检查机制,但这需要用户在每个循环之后进行输入。因此,我希望循环循环并执行此操作,直到按下结束按钮“ Button4”。 File.Exists()函数似乎不适用于通配符(* .xml)名称。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles   Button3.Click
    If (TextBox1.Text = "") Then
        MsgBox("Please select xml folder")
    ElseIf (TextBox2.Text = "") Then
        MsgBox("Please select target folder")
    Else
        RichTextBox1.Text = "Process started..."
        Dim SourcePath = TextBox1.Text
        If System.IO.File.Exists(SourcePath+"/*.xml") Then
            RichTextBox1.AppendText(Environment.NewLine + "Found one xml data, processing it now.. ")
            RichTextBox1.ScrollToCaret()
            RichTextBox1.ReadOnly = True
        Else
            RichTextBox1.AppendText(Environment.NewLine + "No xml data found, looping ... ")
            RichTextBox1.ScrollToCaret()
            RichTextBox1.ReadOnly = True
        End If


    End If



End Sub

当我用test.xml替换* .xml并按开始按钮触发检查时,代码可以工作,但是我无法使用goto运行稳定的循环,并且由于文件名不是常量,因此无论如何都不可行。

P.S:TextBox1TextBox2是OpenFileDialogs,具有每个源文件夹和目标文件夹的名称。 RichTextBox1是嵌入式日志。

2 个答案:

答案 0 :(得分:1)

使用DirectoryInfo来获取文件

var di = new DirectoryInfo("C:\\temp"); //use your path

foreach(var file in di.GetFiles("*.xml"))
{
    //do your work.
}

使用FileSystemWatcher来监视文件并在更改后触发事件

答案 1 :(得分:0)

  

我只是想不通一种方法来检查该特定文件夹中是否有没有文件名的xml文件。

您可以使用System.IO.Directory.EnumerateFiles()System.IO.DirectoryInfo.GetFiles()枚举文件夹的文件,使用"*.xml"作为searchPattern,然后循环返回返回的IEnumerable<string> / FileInfo[]根据需要处理XML文件。

  

我需要一个循环运行的代码,直到按下停止按钮为止。

我建议使“开始”按钮创建一个工作线程/任务,然后使“停止”按钮发出该线程/任务停止的信号。让工作人员枚举文件夹以查找预先存在的XML文件,然后监视文件夹中的更改(例如使用System.IO.FileSystemWatcherReadDirectoryChangesW()),以发现正在创建/写入的新XML文件。根据需要处理XML文件,并根据需要将任何状态信息通知UI线程。

根本不直接在UI线程中运行这样的循环。 UI线程应该只满足UI的需求,而不是冗长的操作。