使用c#将DataTable导出到所需位置(文件夹)上的CSV

时间:2013-01-11 10:08:40

标签: c# asp.net response.write

我已经完成了将数据导出到csv文件的任务。除了目标文件夹之外,每件事情都很好。每次在Windows下载(C:\ Users \ xxxpurt \ Downloads)文件夹中保存csv文件。我想通过指定我可以从SaveFileDialog获取它的位置来使用所需位置来保存csv文件。这可能吗?如果是,那么我如何指定从saveFiledialog检索的路径到响应? Ta

string location = string.Empty;
SaveFileDialog saveCSVDialog = new SaveFileDialog();

saveCSVDialog.InitializeLifetimeService();
saveCSVDialog.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
saveCSVDialog.FilterIndex = 1;
saveCSVDialog.DefaultExt = ".csv";
saveCSVDialog.RestoreDirectory = true;

DialogResult res = STAShowDialog(saveCSVDialog); //STAShowDialog uses threading

if (res == DialogResult.OK)
{
   location = saveCSVDialog.FileName;
}

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename={0}",        Server.HtmlEncode(location)));
Response.Charset = "";
Response.ContentType = "application/text";

.........Fetch columns and rows using loops.........

Response.Output.Write(sb.ToString());
Response.Flush();
Response.End();

2 个答案:

答案 0 :(得分:0)

如评论中所述,您无法决定服务器在客户端上存储文件的位置。而且你真的不应该在你的服务器代码中创建UI元素。

如果要在客户端强制保存文件对话框,可以尝试:

Response.AppendHeader("content-disposition", "attachment; filename=somefile.csv");
Response.ContentType = "text/csv";

然而,最终由客户端浏览器来决定它对它的作用, 大多数人会显示一个保存文件对话框。

答案 1 :(得分:-1)

 SaveFileDialog saveCSVDialog = new SaveFileDialog();

作为类属性和

saveCSVDialog.InitializeLifetimeService();
saveCSVDialog.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
saveCSVDialog.FilterIndex = 1;
saveCSVDialog.DefaultExt = ".csv";
saveCSVDialog.RestoreDirectory = true;

在类构造函数

因为如果你把它们放在一个方法中,每次调用那个方法都会得到SaveFileDialog的新实例