1

我编写了一个应用程序来遍历包含 x 个文件的目录,并将每个文件导入我的程序中的对象中。我为每个“付款”文件创建一个类的实例,并且 FileHelpers 库将文件的每一行作为新记录读取到列表中。如果文件是“信息”,它们只是被移动到预设目录。我想将文件名附加到列表的末尾还是只是将其作为变量包含在内?

我需要知道文件的名称,因为 x 个文件中的每个“付款”都被组合成一个固定宽度的文本文件,以加载到我们的旧住房管理系统中。

更多信息:当我创建固定宽度文件时,我需要在List<Payment>PLUS 中输出每笔付款它们来自的文件的名称。我不确定如何在 FileHelpers/C# 世界中执行此操作:(

EG(用于显示目的的标题 - 导出文件中不需要)

PAYMENTID PAYMENTAMOUNT REFERENCE DATE FILETYPE FILENAME
011102010 000000010000 20148366 26102011 PO SHGR1234.PO
011102011 000000020000 20148367 26102011 PP SHGF6585.PP
011102012 000000030000 20148368 26102011 DD SHGI9854.DD

有任何想法吗?下面是一些代码片段...

更新 - FileHelpers lib = http://www.filehelpers.com/

更新 2 - 用于循环文本文件并获得付款的代码

public List<SundryPayment> getOAPayments()
        {
            FileHelperEngine engine = new FileHelperEngine(typeof(SundryPayment));
            res = (SundryPayment[])engine.ReadFile(getFilePath());
            foreach (SundryPayment record in res)
            {
                OAPaymentsList.Add(record);
            }
            return OAPaymentsList;
        }

更新 2 - 加载文件的代码

public List<object> getFiles()
        {
            List<object> obj = new List<object>();
            foreach (string file in files)
            {
                fileExt = Path.GetExtension(file).ToUpper();
                filePath = Path.GetFullPath(file).ToUpper();
                fileName = Path.GetFileNameWithoutExtension(file).ToUpper();
                fullFileName = Path.GetFileName(file).ToUpper();
                fileFund = fileName.Substring(0, 4).ToUpper();

                if (fileExt == ".DIR" || fileExt == ".ERR" || fileExt == ".CRF" || fileExt == ".STA")
                {
                    //Create Info File
                    InfoFile infofile = new InfoFile(filePath);
                    obj.Add(infofile);
                }
                else if (fileExt == ".PO" || fileExt == ".PP" || fileExt == ".TDC" || fileExt == ".TCC" || fileExt == ".DD" || fileExt == ".CSH" || fileExt == ".CQE"
                    || fileExt == ".PZ")
                {
                    if (fileFund == "SHGS" || fileFund == "GGEN")
                    {
                        //Create OA Payment File
                        OAPaymentFile oafile = new OAPaymentFile(filePath);
                        obj.Add(oafile);
                    }
                    else if (fileFund == "SHGF")
                    {
                        InfoFile infofile = new InfoFile(filePath);
                        obj.Add(infofile);
                    }
                    else
                    {
                        //Create AH Payment File
                        AHPaymentFile ahfile = new AHPaymentFile(filePath);
                        //Console.WriteLine("Object Created: {0}", filePath);
                        obj.Add(ahfile);
                    }
                }
            }

            return obj;


        }

更新 2 - 用于创建固定宽度文件的(原型)代码。需要将 paymetns 来自的文件名放入此文件中

public new void Create()
        {
            string fileToCreate = Path.Combine("\\\\san\\ict\\allpay\\test\\", "cash.txt");

            using (StreamWriter sw = new StreamWriter(fileToCreate))
            {
                foreach (Payment r in ArchousePayments)
                {
                    string archouseref = r.TenancyRef + r.SubAccount + r.CheckDigit;
                    string firstamount = r.AmountPaid.Replace(".", "");
                    string amount = firstamount.PadRight(10, 'x');
                    string transcode = "ALPY";
                    string date = r.PaymentDate.Substring(0, 2) + r.PaymentDate.Substring(3, 2) + r.PaymentDate.Substring(6, 4);
                    string siteref;
                    string comment;
                    sw.WriteLine(archouseref + amount + transcode + date + amount.Length);
                }

            }
        }
4

1 回答 1

1

我通过在我的课程末尾添加另一个固定宽度记录来计算这个Import,然后使用它来存储文件名Path.GetFileName()。然后我可以根据需要将它传递给课堂。

于 2011-11-07T15:53:13.930 回答