我已经完成了将数据导出到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();
答案 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
的新实例