复制文本文件

use*_*714 2 .net c# text file

我试图逐行复制其他文本文件中的文本文件.似乎有1024个字符的缓冲区.如果我的文件中的字符少于1024个,我的功能将不会复制到另一个文件中.

此外,如果超过1024个字符但少于1024个系数,则不会复制这些超出的字符.

例如:

初始文件中有2048个字符 - 复制了2048个字符

初始文件中有988个字符 - 0已复制

初始文件中有1256个字符 - 1024个已复制

private void button3_Click(object sender, EventArgs e)
{
    // écrire code pour reprendre le nom  du fichier sélectionné et 
    //ajouter un suffix "_poly.txt"
    string ma_ligne;
    const int RMV_CARCT = 9;

    //délcaration des fichier
    FileStream apt_file = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read);
    textBox1.Text = textBox1.Text.Replace(".txt", "_mod.txt");
    FileStream mdi_file = new FileStream(textBox1.Text, FileMode.OpenOrCreate,FileAccess.ReadWrite);

    //lecture/ecriture des fichiers en question
  StreamReader apt = new StreamReader(apt_file);
  StreamWriter mdi_line = new StreamWriter(mdi_file, System.Text.Encoding.UTF8, 16);



  while (apt.Peek() >= 0)
  {
      ma_ligne = apt.ReadLine();
      //if (ma_ligne.StartsWith("GOTO"))
      //{
      //   ma_ligne = ma_ligne.Remove(0, RMV_CARCT);
      //   ma_ligne = ma_ligne.Replace(" ","");
      //   ma_ligne = ma_ligne.Replace(",", " ");
      mdi_line.WriteLine(ma_ligne);
      //}
  }
  apt_file.Close();
  mdi_file.Close();
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*son 6

两个问题:

  1. 你的FileStream,StreamWriterStreamReader类应该在using { }块内.它们实现IDisposable,所以你需要调用Dispose,using块就会为你做.如果你这样做,那就是你必须解决的问题(我将在一分钟内解释).这样做也意味着您不再需要打电话Close().
  2. 至少mdi_line.Flush()在关闭之前打电话.这将导致缓冲区立即写入文件.

调用DisposeStreamWriter类autmatically调用Flush,这就是为什么using块将解决这个问题.

using (FileStream apt_file = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read))
{
    textBox1.Text = textBox1.Text.Replace(".txt", "_mod.txt");

    using (FileStream mdi_file = new FileStream(textBox1.Text, FileMode.OpenOrCreate, FileAccess.ReadWrite))
    {
        //lecture/ecriture des fichiers en question 
        using (StreamReader apt = new StreamReader(apt_file))
        using (StreamWriter mdi_line = new StreamWriter(mdi_file, System.Text.Encoding.UTF8, 16))
        {
            while (apt.Peek() >= 0)
            {
                ma_ligne = apt.ReadLine();
                //if (ma_ligne.StartsWith("GOTO")) 
                //{ 
                //   ma_ligne = ma_ligne.Remove(0, RMV_CARCT); 
                //   ma_ligne = ma_ligne.Replace(" ",""); 
                //   ma_ligne = ma_ligne.Replace(",", " "); 
                mdi_line.WriteLine(ma_ligne);
                //} 
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @melt:它会工作,但你真的应该*使用像我描述的`using`块.您应该能够将该代码复制并粘贴到您的应用程序中,以替代那里的代码. (2认同)