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

C#Foreach循环始终创建一个新文件,c#,C#,我想创建一个方法,为每个供应商创建一个新文件 不幸的是,我的尝试没有成功 只需要创建一个文件 My List contains SupplierNr ProofNr 13245242 45519013979 50945724 45519104207 50851942 45519130964 50940487 45519139065 13496912 45519139000 它应该创建5个文件,而不仅仅是一个 我的方法 Str

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

不幸的是,我的尝试没有成功

只需要创建一个文件

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();
}
StreamWriter软件;
int filenumber=1;
DateTime now=DateTime.now;
字符串文件名=$“C:\\Users\\pasca\\Desktop\\Test\\i.lle\u alt.{now.ToString(“yyyyMMdd”)}{filenumber.ToString(“D2”)};
foreach(供应商中的字符串供应商)
{
int-SPID=0;
sw=新StreamWriter(文件名);
对于(int ID=0;ID

请你解释一下我需要更改什么,因为我现在搜索了很多,但没有找到任何示例或我的问题。

你必须将
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 ++;
....

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

            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++;
            }

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

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();
}
foreach(供应商SNR中的字符串供应商)
{
int-SPID=0;
filename=$“C:\\Users\\pasca\\Desktop\\Test\\i.lle\u alt.{now.ToString(“yyyyMMdd”)}{filenumber.ToString(“D2”)};
sw=新StreamWriter(文件名);
对于(int ID=0;ID
尽管您增加了
文件号
但从未更新循环中的变量
文件名

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

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"));       
}
for(int i=0;i