C# 在C Winform get的旧版本中加载CSV文件
我得到的程序能够将CSV和Excel文件加载到datagridview中。 除了CSV文件保留旧数据外,这一切都很好 例如,CSV文件有30个值。我将数据加载到datagridview,它工作正常。 我关闭应用程序,然后编辑CSV文件,删除26行。下一次我打开应用程序并加载文件时,它仍然会得到包含30个值的版本,即使该文件已不存在 为了清楚起见,我在记事本中打开并编辑了该文件,它可以按预期工作,但即使在记事本中编辑了它,我的Winform应用程序似乎也会加载以前的版本。即使我重命名了文件,它仍然会获取不应该存在的数据。即使在完全重新启动电脑后,该文件仍保留不应存在的数据。 但是如果我将文件移动到另一个文件夹,添加新文件夹并将其扔到其中,它会加载新数据 编辑: 看起来它实际上正在加载文件夹中的所有CSV文件。包括旧版本 什么会导致这个问题?查看Excel文件时未遇到此问题 使用的代码:C# 在C Winform get的旧版本中加载CSV文件,c#,winforms,csv,C#,Winforms,Csv,我得到的程序能够将CSV和Excel文件加载到datagridview中。 除了CSV文件保留旧数据外,这一切都很好 例如,CSV文件有30个值。我将数据加载到datagridview,它工作正常。 我关闭应用程序,然后编辑CSV文件,删除26行。下一次我打开应用程序并加载文件时,它仍然会得到包含30个值的版本,即使该文件已不存在 为了清楚起见,我在记事本中打开并编辑了该文件,它可以按预期工作,但即使在记事本中编辑了它,我的Winform应用程序似乎也会加载以前的版本。即使我重命名了文件,它仍然
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();
}
}
}
我发现了这个问题,它和我想的不一样。 看到文件的旧版本也在文件夹中,我没有注意到它没有采用旧版本本身,而是将所有CSV文件合并到输出中 我搜索了这篇文章,找到了以下帖子: 我添加了一个if子句以查看该文件是否为csv文件,然后使用以下命令: 因为打开Excel或CSV文件的区别在于Excel文件要求提供路径和文件名,而CSV只需要路径,然后在查询中选择文件…有点奇怪,但可以
MyCommand = new OleDbDataAdapter("SELECT * FROM [" + Path.GetFileName(openFileDialog1.FileName) + "]", MyConnection);
您对CSV文件的更改真的保存了吗?您确定要加载更改的文件吗?确保应用程序没有保存xlsx而不是csv。储蓄在哪里?您正在使用oledb,必须通过更新或插入将数据写回。@MarkusDeibel我使用记事本将其保存为CSV文件。如果我在记事本或Excel中打开该文件,该文件已经完成了它应该做的事情,但出于某种原因,我的Winforms会继续加载不再存在的文件。就像它在某种缓存中一样。代码showsn是所用代码的全部,当然不是。至少,它缺少程序中使用的各种变量的声明。它需要外部设置,比如CSV文件本身,当然还有Excel安装。如果没有Excel,您无法复制此内容,那么这实际上更多的是Excel用户的问题,而不是编程问题。@a.bakker:忽略发布完整代码的请求并不能让我们轻松帮助您。