я застрял в логике, где я следующий ниже требования:Экспорт и запись CSV в определенном месте
1- Сформировать несколько файлов CSV.
2- Экспорт CSV-файлов в определенное место.
3- ZIP все файлы с этого места.
Раньше я задал вопрос, связанный с созданием 2 файлов на одной кнопке, нажав here. Но позже я обнаружил, что это не можно получить два файла из одного ответа в ASP.NET. Поэтому я решил Zip мои файлы и загрузить на компьютер клиента. Но я генерирую свои CSV-файлы при нажатии кнопки, и у меня нет определенного местоположения. Поэтому я решил сначала сохранить файл CSV на , а затем ZIP-файлы.
Ниже мой код, чтобы сгенерировать свой CSV файл:
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.IO;
using System;
using System.Configuration;
using System.IO.Packaging;
using System.Web;
namespace ExportToCsv
{
public partial class WebForm1 : System.Web.UI.Page
{
//Build the CSV file data as a Comma separated string.
string csvHeader = string.Empty;
//Build the CSV file data as a Comma separated string.
string csvDetails = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ExportCSV(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("select * from mytable-1")
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//foreach (DataRow rows in dt.Rows)
//{
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csvHeader += column.ColumnName + ' ';
}
//Add new line.
csvHeader += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
csvHeader += row[column.ColumnName].ToString().Replace(",", ";") + ' ';
}
//Add new line.
csvHeader += "\r\n";
}
//}
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvHeader);
}
}
}
using (SqlCommand cmd = new SqlCommand("select * from mytable-2")
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//foreach (DataRow rows in dt.Rows)
//{
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csvDetails += column.ColumnName + ' ';
}
//Add new line.
csvDetails += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
csvDetails += row[column.ColumnName].ToString().Replace(",", ";") + ' ';
}
//Add new line.
csvDetails += "\r\n";
}
//}
// Download the CSV file.
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=DetailSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvDetails);
Response.Flush();
Response.End();
}
}
}
}
}
}
}
Я могу достигнуть моего 1-го требования, но не в состоянии достичь 2-ой и 3-ий.
Пожалуйста, помогите. Заранее спасибо.
Добро пожаловать в [so], вы можете найти эту проблему в [so] или google в первую очередь, а затем показать нам проблему, с которой вы столкнулись; Этот пост может помочь вам: http://stackoverflow.com/questions/33839579/mvc-asp-net-zip-file-download – Prisoner
Я искал эту проблему за последние 2 дня, но ничто не соответствует моим требованиям. Ссылка в вашем комментарии также генерирует файл из фиксированного местоположения, но, как я уже упоминал выше, у меня нет определенного места. –
Является ли «фиксированное местоположение» вы имеете в виду «Path.GetTempPath»?Прочтите https://msdn.microsoft.com/en-us/library/system.io.path.gettemppath(v=vs.110).aspx – Prisoner