0

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

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();
4

2 回答 2

0

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

如果你想在客户端强制保存文件对话框,你可以试试这个:

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

然而,最终由客户端浏览器来决定它如何处理它,但大多数都会显示一个保存文件对话框。

于 2013-01-11T10:31:21.253 回答
-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

于 2013-01-11T10:26:17.907 回答