在C#Winform Get的较旧版本中加载CSV文件

时间:2019-11-26 14:17:31

标签: c# winforms csv

我得到的程序能够将CSV和Excel文件加载到datagridview中。 除CSV文件保留旧数据外,此方法都可以正常工作。

例如,CSV文件具有30个值。我将数据加载到datagridview中,并且工作正常。 我关闭该应用程序,然后编辑CSV文件,删除了26行。下次打开应用程序并加载文件时,即使该文件不再存在,它仍然具有30个值的版本。

为清楚起见,我在记事本中打开并编辑该文件,该文件可以按预期工作,但是即使在记事本中对其进行编辑后,我的Winform应用程序似乎仍可以加载以前的版本。即使我重命名该文件,它仍然会获取不应该再存在的数据。即使在完全重启PC之后,该文件仍会保留不应该存在的数据。 但是! 如果我将文件移动到另一个文件夹(添加新文件夹并将其放入其中),它确实会加载新数据...

编辑: 看来它实际上是在文件夹中加载所有CSV文件。 (包括旧版本)

什么会导致此问题?看到Excel文件没有遇到此问题。

使用的代码:

    private void OpenExcel()
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog
        {
            InitialDirectory = @"C:\",
            Title = "Browse Text Files",

            CheckFileExists = true,
            CheckPathExists = true,

            DefaultExt = "txt",
            FilterIndex = 2,
            RestoreDirectory = true,

            ReadOnlyChecked = true,
            ShowReadOnly = true,
            Filter = "Excel Worksheets|*.csv"
        };

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            FileLocation  = openFileDialog1.FileName;                
            GetExcelSheetNames(openFileDialog1.FileName);

            MyConnection = new OleDbConnection(connString);

            MyCommand = new OleDbDataAdapter("select * from [" + SheetName + "]", MyConnection);
            MyCommand.TableMappings.Add("Table", "TestTable");
            Datatable_Temp = new DataTable();
            MyCommand.Fill(Datatable_Temp);
            MyConnection.Close();              
        }
        else
        {
            Canceled = true;
        }            
    }

    private string GetExcelSheetNames(string excelFile)
    {
        OleDbConnection objConn = null;
        DataTable dt = null;
        string CSVOrNot = excelFile.Substring(excelFile.Length - 3);    

        try
        {
            // Connection String.
            if (CSVOrNot == "csv")
            {
                connString = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", Path.GetDirectoryName(excelFile));
            }
            else
            {
                connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + excelFile + ";Extended Properties=Excel 12.0;";
            }
            // Create connection object by using the preceding connection string.
            objConn = new OleDbConnection(connString);
            // Open connection with the database.
            objConn.Open();
            // Get the data table containg the schema guid.
            dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            if (dt == null)
            {
                MessageBox.Show("No Data Found");
                return null;
            }
            SheetName = dt.Rows[0]["TABLE_NAME"].ToString();

            return SheetName;
        }
        catch
        {
            return null;
        }
        finally
        {
            // Clean up.
            if (objConn != null)
            {
                objConn.Close();
                objConn.Dispose();
            }
            if (dt != null)
            {
                dt.Dispose();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

我发现了问题,那与我想的不同。 看到该文件的较旧版本也位于该文件夹中,我没有注意到它并没有采用其本身的较旧版本,而只是将所有CSV文件合并到输出中。

我搜索了此内容,并发现了以下信息: c# reading csv file gives not a valid path

我添加了一个if子句以查看该文件是否为csv文件,然后使用以下命令: 因为打开Excel或CSV文件之间的区别是Excel文件要求输入路径和文件名,而CSV仅需要路径,后来又在查询中选择了文件...有点奇怪,但可以。

MyCommand = new OleDbDataAdapter("SELECT * FROM [" + Path.GetFileName(openFileDialog1.FileName) + "]", MyConnection);