Сохранить на локальный диск - PullRequest
0 голосов
/ 21 декабря 2011

Я выполнил задачу, в которой файлы csv можно выбрать с помощью календаря и формы загрузки FTP.

В настоящее время я заранее определил локальный путь к диску для сохранения файлов csv.

Мне нужно показать pop для сохранения, так как тогда пользователь должен сохранять в любое место, где ему нужно.

private void Download()
{
  System.DateTime myDate = new System.DateTime();
  myDate = caldownload.SelectedDate;
  System.DateTime myDate1 = new System.DateTime();
  myDate1 = Calendar1.SelectedDate;
  string sdate;
  string edate;
  TextBox1.Text = myDate.ToString("yyyy-MM-dd");
  TextBox2.Text = myDate1.ToString("yyyy-MM-dd");
  DateTime d1 = myDate.Date;
  DateTime d2 = myDate1.Date;
  TimeSpan sum = d2 - d1;

  int NrOfDays = sum.Days;
  NrOfDays++;

  int k = NrOfDays;
  string[] fileName = new string[k];

  //increment for days
  int s = myDate.Day;

  FtpWebRequest reqFTP;
  try
  {
    if (NrOfDays<=7)
    {
      for (k = 0; k <= NrOfDays; k++)
      {
        fname[i] = myDate.ToString("yyyy-MM-dd");
        fileName[k] = myDate.ToString("yyyy-MM-dd");

        //files to save local drive
        FileStream outputStream = new FileStream("F:\\ch" + "\\" + fname[i]+".csv", FileMode.Create);
        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + "192.162.1.152" + "//" + "[100]" + "//" + fileName[k] + ".csv"));

        reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
        reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
        reqFTP.UseBinary = true;
        reqFTP.Credentials = new NetworkCredential("", "");
        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

        Stream ftpStream = response.GetResponseStream();
        long cl = response.ContentLength;
        int bufferSize = 2048;
        int readCount;
        byte[] buffer = new byte[bufferSize];

        readCount = ftpStream.Read(buffer, 0, bufferSize);
        while (readCount > 0)
        {
          outputStream.Write(buffer, 0, readCount);
          readCount = ftpStream.Read(buffer, 0, bufferSize);
        }

        myDate = myDate.AddDays(1);

        ftpStream.Close();
        outputStream.Close();
        response.Close();
      }
    }
    else
    {
      ScriptManager.RegisterStartupScript(this, this.GetType(), "message", "alert('You are allowed to download files for maximum of 7 days .');location.href = 'Default.aspx';", true);
    }
  }
  catch (Exception ex)
  { }
}

1 Ответ

2 голосов
/ 21 декабря 2011

Вы можете добавить SaveFileDialog для получения имени файла от пользователя.

Например:

        string sFileNameToSaveAs = "";

        using (var dialog = new SaveFileDialog())
        {
            dialog.AddExtension = true;
            dialog.Filter = "CSV Files (*.csv) | *.csv";
            dialog.Title = "Select the file name to save as";
            dialog.InitialDirectory = "C:\\";
            dialog.CheckPathExists = true;
            dialog.DefaultExt = ".csv";
            dialog.ValidateNames = true;

            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                sFileNameToSaveAs = dialog.FileName;
            }
        }

        if (!string.IsNullOrEmpty(sFileNameToSaveAs))
        {
            FileStream outputStream = new FileStream(sFileNameToSaveAs, FileMode.Create);
            // The rest of your retrieval code goes here
        }
...