我编写了一个应用程序来遍历包含 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);
}
}
}