使用csvhelper写入csv文件显示空白

时间:2018-04-20 13:51:34

标签: c# asp.net-mvc

Guys正在尝试从视图中读取csv文件,获取其数据,格式化并写回空的csv文件。目前已经能够实现第一种方法,现在的挑战是写回创建的空csv文件,但是在写入文件后csv文件总是空白。如果我遗失任何东西,有人可以帮助我。注意"我只是读写字段,与听众无关,因为csv文件没有标题"我正在使用csvhelper库。

        if (file.ContentLength > 0)
        {

            string origin = "FORMATERCSV";

            string destination = "FORMATERCSVDESTINATION";
            string curretnDate = Convert.ToString(DateTime.Now.ToShortDateString().Replace(@"/", "_"));
            var fileName = Path.GetFileName(file.FileName);

            var pathfound = Server.MapPath( @"/" + "Content" + "/" + origin + "/" +  curretnDate + "/");
            var pathfoundDestination  = Server.MapPath(@"/" + "Content" + "/" + destination + "/" + curretnDate + "/");
            if (!Directory.Exists(pathfound)) Directory.CreateDirectory(pathfound);

            if (!Directory.Exists(pathfoundDestination)) Directory.CreateDirectory(pathfoundDestination);



            string PathToStore = string.Format(@"{0}\{1}", pathfound, fileName);

            string PathToStoreDestination = string.Format(@"{0}\{1}", pathfoundDestination, fileName);
            var path = Path.Combine(pathfound,fileName);
            file.SaveAs(PathToStore);

            file.SaveAs(PathToStoreDestination);
            System.IO.File.WriteAllText(PathToStoreDestination,string.Empty);



            StreamReader sr = new StreamReader(PathToStore);


            CsvReader csvread = new CsvReader(sr);

            csvread.Read();

            var shedule = new Shedule()
            {
                RSA_PIN = csvread.GetField<string>(0),
                EMPLOYEE_NAME = csvread.GetField<string>(1),
                EMPLOYER_CONTRIBUTION = csvread.GetField<double>(2),
                EMPLOYER_VC = csvread.GetField<double>(3),
                EMPLOYEE_CONTRIBUTION = csvread.GetField<double>(4),
                EMPLOYEE_VC = csvread.GetField<double>(5),
                TOTAL_CONTRIBUTION = csvread.GetField<double>(6),
                FROM_MONTH = csvread.GetField<string>(7),
                FROM_YEAR = csvread.GetField<string>(8),
                TO_MONTH = csvread.GetField<string>(9),
                TO_YEAR = csvread.GetField<string>(10),
                EMPLOYER_CODE = csvread.GetField<string>(11),
                EMPLOYER_NAME = csvread.GetField<string>(12),
                PTID = csvread.GetField<string>(13),
                RECEIVED_DATE = csvread.GetField<string>(14),



            };





            StreamWriter sw = new StreamWriter(PathToStoreDestination);
            CsvWriter scvwrite = new CsvWriter(sw);
            scvwrite.WriteField(shedule.RSA_PIN);
            scvwrite.WriteField(shedule.EMPLOYER_CONTRIBUTION);
            scvwrite.WriteField(shedule.EMPLOYER_VC);
            scvwrite.WriteField(shedule.EMPLOYEE_CONTRIBUTION);
            scvwrite.WriteField(shedule.EMPLOYEE_VC);
            scvwrite.WriteField(shedule.TOTAL_CONTRIBUTION);
            scvwrite.WriteField(shedule.FROM_MONTH);
            scvwrite.WriteField(shedule.FROM_YEAR);
            scvwrite.WriteField(shedule.TO_MONTH);
            scvwrite.WriteField(shedule.TO_YEAR);
            scvwrite.WriteField(shedule.EMPLOYER_CODE);
            scvwrite.WriteField(shedule.EMPLOYEE_NAME);
            scvwrite.WriteField(shedule.PTID);
            scvwrite.WriteField(shedule.RECEIVED_DATE);
            scvwrite.NextRecord();
            scvwrite.Flush();

            // Gets field by position returning int
            //  var field = csv.GetField<int>(0);
        }

        return RedirectToAction("Index");
    }

2 个答案:

答案 0 :(得分:1)

实际上可能会发生一些事情。

1)你确定视图中的文件不是空的吗?

2)如果在实例化课程时使用断点。您是否从CSV获取数据。

3)你真的需要做到这一步2,将原始文件的内容直接写入新文件不是更好吗?

4)最后但并非最不重要的是不要忘记关闭你的编写者或者这样做:

using(var sw = new StreamWriter(PathToStoreDestination)){

        CsvWriter scvwrite = new CsvWriter(sw);
        scvwrite.WriteField(shedule.RSA_PIN);
        scvwrite.WriteField(shedule.EMPLOYER_CONTRIBUTION);
        scvwrite.WriteField(shedule.EMPLOYER_VC);
        scvwrite.WriteField(shedule.EMPLOYEE_CONTRIBUTION);
        scvwrite.WriteField(shedule.EMPLOYEE_VC);
        scvwrite.WriteField(shedule.TOTAL_CONTRIBUTION);
        scvwrite.WriteField(shedule.FROM_MONTH);
        scvwrite.WriteField(shedule.FROM_YEAR);
        scvwrite.WriteField(shedule.TO_MONTH);
        scvwrite.WriteField(shedule.TO_YEAR);
        scvwrite.WriteField(shedule.EMPLOYER_CODE);
        scvwrite.WriteField(shedule.EMPLOYEE_NAME);
        scvwrite.WriteField(shedule.PTID);
        scvwrite.WriteField(shedule.RECEIVED_DATE);
        scvwrite.Flush();
}

这样做甚至不需要指定刷新。

答案 1 :(得分:0)

            using (var sw = new StreamWriter(PathToStoreDestination))
            {
                sw.AutoFlush = true;

                CsvWriter scvwrite = new CsvWriter(sw);
                scvwrite.WriteField(shedule.RSA_PIN);
                scvwrite.WriteField(shedule.EMPLOYEE_NAME);
                scvwrite.WriteField(shedule.EMPLOYER_CONTRIBUTION);
                scvwrite.WriteField(shedule.EMPLOYER_VC);
                scvwrite.WriteField(shedule.EMPLOYEE_CONTRIBUTION);
                scvwrite.WriteField(shedule.EMPLOYEE_VC);
                scvwrite.WriteField(shedule.TOTAL_CONTRIBUTION);
                scvwrite.WriteField(shedule.FROM_MONTH);
                scvwrite.WriteField(shedule.FROM_YEAR);
                scvwrite.WriteField(shedule.TO_MONTH);
                scvwrite.WriteField(shedule.TO_YEAR);
                scvwrite.WriteField(shedule.EMPLOYER_CODE);
                scvwrite.WriteField(shedule.EMPLOYER_NAME);
                scvwrite.WriteField(shedule.PTID);
                scvwrite.WriteField(shedule.RECEIVED_DATE);

                scvwrite.NextRecord();
                //scvwrite.Flush();
            }