C#Foreach循环始终创建一个新文件

时间:2018-07-02 09:36:43

标签: c#

我想创建一个为每个供应商创建一个新文件的方法。

很不幸,我的尝试没有用。

仅创建一个文件。

My List contains 
SupplierNr     ProofNr
13245242       45519013979
50945724       45519104207
50851942       45519130964
50940487       45519139065
13496912       45519139000

它应该创建5个文件,而不仅仅是一个。

我的方法

StreamWriter sw;
int filenumber = 1;
DateTime now = DateTime.Now;
string filename = $"C:\\Users\\pasca\\Desktop\\Test\\i.lle_alt.{now.ToString("yyyyMMdd")}{filenumber.ToString("D2")}";

foreach (string Supplier in SuppliersNr)
{
    int SPID = 0;

    sw = new StreamWriter(filename);

    for (int ID = 0; ID < CustomerProduct.Count; ID++)
    {
        sw.WriteLine($"{CustomerProduct[ID]};{DateBegin};{DateEnd};{Supplier};{Origin[ID]};{NonPreference[ID]};{ProofNr[SPID]};");
    }

    SPnr++;
    filenumber++;
    sw.Close();
}

您能请我解释一下我需要更改的内容吗,因为我现在搜索了很多,但是找不到任何示例或问题。

4 个答案:

答案 0 :(得分:3)

尽管您递增filenumber,但从未在循环内更新变量filename

我建议创建一个基本的文件名部分,该部分是固定的(因为它在迭代过程中不会改变:

string filenameBase = $"C:\\Users\\pasca\\Desktop\\Test\\i.lle_alt.{now.ToString("yyyyMMdd")}"

在循环内仅更改最后一部分

foreach (string Supplier in SuppliersNr)
{
    sw = new StreamWriter(filenameBase + filenumber.ToString("D2"));
    filenumber++;       
}

通过使用常规的for循环,您实际上可以摆脱多余的变量filenumber。这样,增量将自动发生:

for (int i = 0; i < SuppliersNr.Count; i++) //<- assuming that SuppliersNr is a List<string>
{
    sw = new StreamWriter(filenameBase + (i + 1).ToString("D2"));       
}

答案 1 :(得分:1)

您必须将filename创建放在foreach循环中。试试:

int filenumber = 1;
DateTime now = DateTime.Now;       
foreach (string Supplier in SuppliersNr)
{
  string filename = $"C:\\Users\\pasca\\Desktop\\Test\\i.lle_alt.{now.ToString("yyyyMMdd")}{filenumber.ToString("D2")}";
  filenumber ++;
....

答案 2 :(得分:1)

filename是相同的,因为您在filenumber为1时定义了它。
您需要在foreach循环中更新filename

foreach (string Supplier in SuppliersNr)
{
    int SPID = 0;
    filename = $"C:\\Users\\pasca\\Desktop\\Test\\i.lle_alt.{now.ToString("yyyyMMdd")}{filenumber.ToString("D2")}";

    sw = new StreamWriter(filename);

    for (int ID = 0; ID < CustomerProduct.Count; ID++)
    {
        sw.WriteLine($"{CustomerProduct[ID]};{DateBegin};{DateEnd};{Supplier};{Origin[ID]};{NonPreference[ID]};{ProofNr[SPID]};");
    }

    SPnr++;
    filenumber++;
    sw.Close();
}

答案 3 :(得分:0)

您应该将文件名放在此循环中,如下所示:

            foreach (string Supplier in SuppliersNr)
            {
                string filename = $"C:\\Users\\pasca\\Desktop\\Test\\i.lle_alt.{now.ToString("yyyyMMdd")}{filenumber.ToString("D2")}";
                sw = new StreamWriter(filename);

                //your logic
                //fileNumber++;
            }