StreamReader and streamwriter

本文关键字:streamwriter and StreamReader | 更新日期: 2023-09-27 18:03:40

请问这个异常是什么意思?

Unhandled Exception: System。ObjectDisposedException:对象是弃置后使用。写(System. io . streamwriter . write)字符串值)[0x00000]: 0System. io . textwwriter . writeline字符串值)[0x00000] in:0主系统。字符串[]args) [0x000bd]在/用户/mediatun1/项目/文件/文件/c: 122

  System.Security.Cryptography.MD5 alg = System.Security.Cryptography.MD5.Create();
    System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
    byte[] md5val = alg.ComputeHash(enc.GetBytes("TESTTESTTESTTESTTESTTEST"));
    string output = Convert.ToBase64String(md5val);
    string pathPlainTextFile="/Users/mediatun1/Desktop/IAAT.xml"; 
    string pathCypheredTextFile="/Users/mediatun1/Desktop/IAA.xml";
    StreamReader fsPlainTextFile = File.OpenText(pathPlainTextFile);
    FileInfo t = new FileInfo(pathCypheredTextFile);
    StreamWriter Tex =t.CreateText();
    string input = null;
    while ((input = fsPlainTextFile.ReadLine()) != null)
    {

                  byte[] plainText = Encoding.UTF8.GetBytes(input);

                RijndaelManaged rijndael = new RijndaelManaged();
                // Définit le mode utilisé
                rijndael.Mode = CipherMode.ECB;
                // Crée le chiffreur AES - Rijndael
                ICryptoTransform aesEncryptor = rijndael.CreateEncryptor(md5val,null);
                MemoryStream ms = new MemoryStream();
                // Ecris les données chiffrées dans le MemoryStream
                CryptoStream cs = new CryptoStream(ms, aesEncryptor, CryptoStreamMode.Write);
                cs.Write(plainText, 0, plainText.Length);
                cs.FlushFinalBlock();

                // Place les données chiffrées dans un tableau d'octet
                byte[] CipherBytes = ms.ToArray();

                ms.Close();
                cs.Close();
                // Place les données chiffrées dans une chaine encodée en Base64
    Tex.WriteLine (Convert.ToBase64String(CipherBytes));
                Console.WriteLine (Convert.ToBase64String(CipherBytes));
            Tex.Close();    

    }

StreamReader and streamwriter

您的循环中有Tex.Close();。因此,在迭代1之后,StreamWriter被关闭。

一般在环外开的Streams应在环外闭合

听起来像是过早关闭流的问题。如果你改变

的顺序,也许我不能在你的代码中算出来。
ms.Close();
cs.Close();

……

cs.Close();
ms.Close();

it may work

EDIT:正如jaywayco所指出的,失败的代码肯定是由于Tex在循环中被关闭。当我试图理解代码

时,我完全错过了这一点。

然而,你真的需要整理所有这些。你应该为你的流使用"using"语句,因为这将在完成后自动关闭它们。类似…

using(MemoryStream ms = new MemoryStream(...))
{
   using(CryptoStream cs = new CryptoStream(...))
   {
      //code for cs stream in here
   }
}