Streamwriter 不会覆盖文件,继续追加或只写入第一行

Streamwriter will not overwrite file, keeps appending or writes only the first line

一直在查看其他人的答案,但似乎没有任何效果。

这是我的代码:

    public void TaskOnClick() //getting multi-values
    {
        foreach (string inputJson in File.ReadLines("Assets/Text/multi-import.txt"))
        {
            string temperature = GetTemperatureByRegex(inputJson);
            Debug.Log(temperature);

            string filename = "Assets/Text/TEMP/multi-export.txt";
            {
                using (StreamWriter writeFile = new StreamWriter(filename, false))
                {
                    writeFile.AutoFlush = true;
                    Console.SetOut(writeFile);
                    writeFile.WriteLineAsync(temperature.ToString());
                }
            }
        }

    }

我的想法是我的解析脚本获取我的数据,然后 streamwriter 将数据写入 txt 文件。问题是 streamwriter 一直附加 txt 文件而不是覆盖文件。 每当我尝试使用文件流时,它都会覆盖文件,是的,但是无论我尝试什么,都只会写入数据的第一行。

我的用户名不言而喻...

为什么不在打开流写入器之前删除文件?

if(File.Exists(filename)){
             File.Delete(filename);
             }
   //here whatever you need to do next

你做错的是在循环中创建 StreamWriter。如果您提供覆盖设置,它只会写入 1 行。

public void TaskOnClick() //getting multi-values
    {
       string filename = "Assets/Text/TEMP/multi-export.txt";
       using (StreamWriter writeFile = new StreamWriter(filename, false))
       {
        foreach (string inputJson in File.ReadLines("Assets/Text/multi-import.txt"))
        {
            string temperature = GetTemperatureByRegex(inputJson);
            Debug.Log(temperature);  
            writeFile.AutoFlush = true;
            Console.SetOut(writeFile);
            writeFile.WriteLine(temperature.ToString());            
        }
      }
    }

但是在 LINQ 的帮助下,有一种更短的方法可以做到这一点。

public void TaskOnClick() //getting multi-values
    {
       string filename = "Assets/Text/TEMP/multi-export.txt";            
       var tempratures = File.ReadAllLines("Assets/Text/multi-import.txt")
                         .Select(GetTemperatureByRegex).ToArray();
       File.WriteAllLines(filename,tempratures); // it creates a new file or overwrites

     }    

我必须声明,如果输入文件太大,上述方法可能很危险。因为它将整个文件读入内存。