2009-12-15 6 views
0

파일에 오류가있어 코드가 사용 중입니다. 내가 달성해야하는 것은 암호화 된 데이터의 첫 번째 부분을 파일에 추가 한 다음 동일한 파일에 암호화 된 데이터의 두 번째 부분을 추가하는 것입니다. 이 파일은 나중에 암호 해독해야합니다. 나는이 분야에서 꽤 새로운 사람이다. 많은 감사합니다.C# rijndael 스트림 작성자 문제

Class3 cs3; 
    StreamWriter sWriter; 

    private void Add_text_Part_One() 
    { 
     Rijndael RijndaelAlg = Rijndael.Create(); 
     // Create a string to encrypt. 
     string sData = "Here is some data to encrypt."; 
     string FileName = @"C:\CText.txt"; 

     cs3 = new Class3(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV); 
     sWriter = new StreamWriter(cs3.getCS()); 
     sWriter.WriteLine(sData); 
     sWriter.Close(); 
    } 

    private void Add_text_Part_Two() 
    { 
     string sData = "Here is some more data to encrypt."; 
     sWriter.WriteLine(sData); 
     sWriter.Close(); 
    } 
class Class3 
{ 
    FileStream fStream; 
    Rijndael RijndaelAlg; 
    CryptoStream cStream; 
    public Class3(String Data, String FileName, byte[] Key, byte[] IV) 
    { 
     fStream = File.Open(FileName, FileMode.Append); 
     RijndaelAlg = Rijndael.Create(); 
     cStream = new CryptoStream(fStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write); 
    } 
    public CryptoStream getCS() 
    { 
     return cStream; 
    } 

    public string getRes() 
    { 
     StreamReader sReader = new StreamReader(cStream); 
     string val = null; 
     val = sReader.ReadLine(); 
     return val; 
    }  

답변

2

Class3의 생성자에서 File.Open()을 호출하고 결과 FileStream을 fstream에 할당합니다. 이 fstream 객체는 절대로 닫히지 않으므로 파일은 열려 있습니다. 당신은 fstream을 닫아야 할 것입니다. (아마도 IDisposable을 구현하고 사용하는 블록 내에서 Class3을 사용해야합니다.)

편집 : 죄송합니다. 위의 내용이 옳다고 생각하지 않지만 StreamWriter를 종료 한 다음 닫은 상태에서 II 부에서 다시 쓰려고하면 해당 내용을 살펴볼 수 있습니다.

+0

"sWriter.Close();"를 제거하면 작동합니까? 첫 번째 방법으로? – Kelvin

+0

내가 할 수있는 말은 총을내는 것입니다. – LorenVS

+0

이 작동하지 않습니다. 코드를 정리하고 다시 시도해 보겠습니다. 여전히 작동하지 않으면 여기에 게시합니다. 이것은 닫혔습니다. 고마워 – Kelvin