C# создать файл непосредственно на другом сервере - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать отчет в формате PDF из базы данных и скопировать этот файл в sharedFolder на другом сервере. Но каждый раз, когда я его отправляю, исключение системного выброса говорит, что файл не найден, даже когда File.exist возвращает true. Так что я планирую создать его непосредственно в sharedFolder, это возможно? Вот код, который я уже создал.

var reportDataSource1 = new ReportDataSource(table.TableName, table);
ReportViewer viewer = new ReportViewer();
viewer.ProcessingMode = ProcessingMode.Local;
viewer.LocalReport.DataSources.Add(reportDataSource1);
viewer.LocalReport.ReportPath = @"C:\Test\GRN.rdl";
PDFExport(viewer.LocalReport, headerDiff[i].Trim());
sendPdfUsingFtp()


private static void PDFExport(LocalReport localReport, string header)
{
    Warning[] warnings;
    string[] streamids;
    string mimetype;
    string encoding;
    string filenameExtension;

    byte[] bytes = localReport.Render("PDF", null, out mimetype, out encoding, out filenameExtension, out streamids, out warnings);

    try
    {
        using (FileStream fs = new FileStream(@ConfigurationSettings.AppSettings["reportDir"] + "GNR-" + header.Replace(" ", "_") + ".pdf", FileMode.Create))
        {
            fs.Write(bytes, 0, bytes.Length);
            fs.Flush();
            fs.Close();
        }

        Console.WriteLine("File.Exists(" + @ConfigurationSettings.AppSettings["reportDir"] + "GNR-" + header.Replace(" ", "_") + ".pdf" + ") = " + File.Exists(@ConfigurationSettings.AppSettings["reportDir"] + "GNR-" + header.Replace(" ", "_") + ".pdf"));
        //this return true
    }
    catch(Exception e)
    {
        createLog(e.Message);
    }
}

public void sendPdfUsingFtp()
{
    string server = "ftp://192.168.100.50/Baru"; //ftp server url
    string userName = "Admin";
    string password = "password";
    if (headerDiff.Length > 0)
    {
        for (int i = 0; i < headerDiff.Length; i++)
        {
            String files = @ConfigurationSettings.AppSettings["reportDir"] + "GRN-" + headerDiff[i].Trim().Replace(" ", "_") + ".pdf";
            try
            {
                Boolean exist = File.Exists(@files); // this return false
                if (exist)
                {
                    string[] pdfList = Directory.GetFiles(@ConfigurationSettings.AppSettings["reportDir"], "GRN-" + headerDiff[i].Trim().Replace(" ", "_") + ".pdf");
                    foreach (string f in pdfList)
                     {
                        Console.WriteLine("file = " + f);
                        string name = f.Substring(@ConfigurationSettings.AppSettings["reportDir"].Length);

                        string fileName = Path.GetFileName(@ConfigurationSettings.AppSettings["reportDir"] + "GRN-" + headerDiff[i].Trim().Replace(" ", "_") + ".pdf");
                        string uploadUrl = string.Format("{0}/{1}", server, fileName);
                        FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(uploadUrl);
                        req.Proxy = null;
                        req.Method = WebRequestMethods.Ftp.UploadFile;
                        req.Credentials = new NetworkCredential(userName, password);
                        req.UseBinary = true;
                        req.UsePassive = true;
                        FileStream fs = File.OpenRead(@ConfigurationSettings.AppSettings["reportDir"] + "GRN-" + headerDiff[i].Trim().Replace(" ", "_") + ".pdf");
                        byte[] data = new byte[fs.Length];
                        fs.Read(data, 0, data.Length);

                        Stream stream = req.GetRequestStream();
                        stream.Write(data, 0, data.Length);
                        Console.WriteLine("Upload " + "GRN-" + headerDiff[i].Trim() + ".pdf" + " done!");
                        fs.Close();
                        stream.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                createLog(ex.Message);
                updateLogTable("RCVN", headerDiff[i], "FTP", 0, ex.Message);
            }
        }
    }
}
...