在c#中自动化openFileDialog进程

时间:2014-06-11 14:44:20

标签: c#

我已经尝试过这段代码,它会将文件对话框打开到正确的位置,并且只需要选择一个xml文件(我需要选择它并单击打开),而不是选择文件并单击打开到处理文件是否有任何方法可以禁用打开文件对话框上的打开按钮。这里我的xml文件每天都在变化。我给了* .xml但是给了我一个错误路径中的非法字符..我的文件格式是这个。

lborough vehicles_in 2014-06-05.xml ==这会根据日期每天更改。

不点击打开如何选择文件。

OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "XML Files (*.xml)|*.xml";
string initPath = Path.GetFullPath("C:/Users/IT-Administrator/Desktop/LUVS/");
dialog.InitialDirectory = Path.GetFullPath(initPath);
tblVehicles = new DataTable();
dv = new DataView(tblVehicles);

if (dialog.ShowDialog() == DialogResult.OK)
{
    if (dialog.FileName.Length > 0)
    {
        //Load Schema and Vehicle_In XML file
        tblVehicles.ReadXmlSchema(Path.Combine(applicationFolder, "vehicles_in.xsd"));
        tblVehicles.ReadXml(dialog.FileName);

        this.dataGridView1.DataSource = tblVehicles;
        this.dataGridView1.AllowUserToAddRows = false;
        this.dataGridView1.ReadOnly = true;

** **更新
我试过这个可以告诉我如何在运行时从Directory.get文件中打开文件

string[] filePaths = Directory.GetFiles(@"C:\Users\IT-Administrator\Desktop\LUVS/", "*.xml", SearchOption.AllDirectories); 
FileStream stream = File.Open(@"C:\Users\IT-Administrator\Desktop\LUVS*.xml", 
FileMode.Open); 
tblVehicles = new DataTable(); 
dv = new DataView(tblVehicles); 
tblVehicles.ReadXmlSchema(Path.Combine(applicationFolder, "vehicles_in.xsd")); 
tblVehicles.ReadXml(stream);

4 个答案:

答案 0 :(得分:2)

是否有任何理由不能使用Directory.GetFiles获取目录中的所有文件并使用File.Open来获取文件?如果您不想使用FileDialog,为什么要使用FileDialog?

更新

 //Load Schema and Vehicle_In XML file
 tblVehicles.ReadXmlSchema(Path.Combine(applicationFolder, "vehicles_in.xsd"));

 // Get all XML files from the files directory
 string[] filePaths = Directory.GetFiles(@"files\", "*.xml", SearchOption.AllDirectories);

 // Read the first XML file in the files directory
 tblVehicles.ReadXml(filePaths[0]);

这是你要的吗?

答案 1 :(得分:2)

你最终尝试的解决方案并没有得到它:

/* Gives you an array of file names */
string[] filePaths = Directory.GetFiles(@"C:\Users\IT-Administrator\Desktop\LUVS/", "*.xml", SearchOption.AllDirectories); 

FileStream stream = File.Open(@"C:\Users\IT-Administrator\Desktop\LUVS*.xml", 
FileMode.Open); 

您没有使用该阵列,而只是尝试打开通配符路径;你不能这样做。 File.Open只接受单个文件路径。

相反,尝试更像这样的事情:

/* Gives you an array of file names */
string[] filePaths = Directory.GetFiles(@"C:\Users\IT-Administrator\Desktop\LUVS/", "*.xml", SearchOption.AllDirectories); 

// Work with each file individually
foreach(var filePath in filePaths)
{
    using(FileStream stream = File.Open(filePath, FileMode.Open))
    {
        tblVehicles = new DataTable(); 
        dv = new DataView(tblVehicles); 
        tblVehicles.ReadXmlSchema(Path.Combine(applicationFolder, "vehicles_in.xsd")); 
        tblVehicles.ReadXml(stream);
        // Do whatever you need to do with the data from this one file, then move on....
     {
}

答案 2 :(得分:0)

您可以使用SendKeys(),但它很笨重,如果用户将焦点移到其他位置,您可能最终会将键击发送到错误的窗口。

openFileDialog不是非常可自定义的,因此您可能需要考虑使用openFolderDialog并将已知文件名附加到用户选定的目录。

答案 3 :(得分:0)

当您想要选择文件并使用它时,您需要一个按钮行为。这里最好的方法是让您自己的UserControl显示目录中存在的文件。 1.从目录中获取文件 2.使用按钮显示对话框,每个按钮都与其文件相关联。 3.单击按钮,关闭对话框并将文件传递给方法。