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();
}
您的循环中有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
}
}