我有一个文件夹,其中有一个软件生成随机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:TextBox1
和TextBox2
是OpenFileDialogs,具有每个源文件夹和目标文件夹的名称。 RichTextBox1
是嵌入式日志。
答案 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.FileSystemWatcher
或ReadDirectoryChangesW()
),以发现正在创建/写入的新XML文件。根据需要处理XML文件,并根据需要将任何状态信息通知UI线程。
根本不直接在UI线程中运行这样的循环。 UI线程应该只满足UI的需求,而不是冗长的操作。