所以我已经有一个正常工作的拖放框,可以打开一个.csv文件。我也想添加一个打开文件的openfiledialog方法。在我的拖放功能中,我有:
private void panel1_DragDrop(object sender, DragEventArgs e)
{
Console.WriteLine("Here 1");
firstTimeThrough = true;
timer.Stop();
if (browseRecordFiles == true)
{
files = (string[])e.Data.GetData(fileLocation, false);
} else
{
files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
}
很显然... GetData(fileLocation,false);在这里不能工作。是否有其他解决方法?我有一个ForEach循环,然后循环访问“文件”,所以这就是为什么我希望它以这种方式工作。
“ browseRecordFiles”是一个布尔值,如果单击“浏览”按钮,则该布尔值变为true。
即:fileLocation将为c:\ users \ Administrator \ desktop \ something.csv
编辑:我具有按钮以打开文件对话框,但是我有一个ForEach循环,如下所示:
foreach (string file in files)
{
try
{
using (var reader = new StreamReader(file)) // reading the file
{
while (!reader.EndOfStream) // Read until the end of the stream
{
var line = reader.ReadLine().Replace("\"", "");
//Console.WriteLine(line);
var values = line.Split(',', ' '); // Ignore the , in the .CSV file and start next read column
foreach (var k in values)
{
//Console.WriteLine(k);
}
data.Add(values); // Add all values to data list
}
文件是一个字符串数组,但只有保留拖放文件的文件路径。有没有一种方法可以像用户通过从打开的文件对话框中获取文件路径将文件拖放到文件上一样“模仿”?
答案 0 :(得分:0)
假设这是Windows窗体应用程序...
OpenFileDialog
控件。它将命名为openFileDialog1
DefaultExt
设置为csv
,将Filter
设置为Comma-Separated Files|*.csv|All Files (*.*)|*.*
Title
Click
处理程序,然后将代码文件打开到该位置。这是标准的打开文件处理程序:
private void OpenFileBtn_Click(object sender, EventArgs e)
{
//you may want to set the default `InitialDirectory` property
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//do something with the information from the OpenFileDialog
//in particular, you are going to want to read the `FileName` property
}
}
如果您希望用户一次可以打开多个文件,请设置MultiSelect
属性。
要使用那些多次选择的文件名,请查看对话框的FileNames
属性。它是用户选择的文件名(完整的文件名和路径名)的集合。遍历该列表并调用File.ReadAllText
或File.ReadAllLines
以获取CSV文件的内容。