PDA

View Full Version : Aiuto con .net (composizione di streams)


bertoz85
08-07-2006, 19:34
Ciao ......
Ho preso uno snippet di codice dall'msdn che data una stringa, la crittografa e poi la scrive su un file.... sto cercando di modificarlo in modo di poter scrivere, sempre con lo stesso stream, anche dati miei arbitrari non crittografati.... per esempio dopo la scritta crittografata voglio scrivere "ciao" non crittografato....

Lo snippet è questo:

Sub EncryptTextToFile(ByVal Data As String, ByVal FileName As String, ByVal Key() As Byte, ByVal IV() As Byte)
Try
' Create or open the specified file.
Dim fStream As FileStream = File.Open(FileName, FileMode.OpenOrCreate)

' Create a new Rijndael object.
Dim RijndaelAlg As Rijndael = Rijndael.Create

' Create a CryptoStream using the FileStream
' and the passed key and initialization vector (IV).
Dim cStream As New CryptoStream(fStream, _
RijndaelAlg.CreateEncryptor(Key, IV), _
CryptoStreamMode.Write)

' Create a StreamWriter using the CryptoStream.
Dim sWriter As New StreamWriter(cStream)

Try

' Write the data to the stream
' to encrypt it.
sWriter.WriteLine(Data)
Catch e As Exception

Console.WriteLine("An error occurred: {0}", e.Message)

Finally

' Close the streams and
' close the file.
sWriter.Close()
cStream.Close()
fStream.Close()

End Try
Catch e As CryptographicException
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message)
Catch e As UnauthorizedAccessException
Console.WriteLine("A file error occurred: {0}", e.Message)
End Try
End Sub


come vedete crea uno stream su un file, ci aggancia lo stream "criptatore" cstream e infine a quest'ultimo aggancia uno streamwriter.
dato che conosco poco il net, ho pensato di creare un altro StreamWriter e agganciarlo direttamente al file in modo che i dati non passino dal "criptatore".
poi dentro al 2° try/catch ho messo la write("Ciao") sullo streamwriter appena creato.

il problema è che anche mettendo tutti i flush o autoflush necessari, nel file i dati vengono messi a caso. qualche volta mi crittografa i dati e mi mette "ciao" dopo........
qualche altra volta mi crittografa metà dei dati e scrive "ciao" e poi c'è l'altra metà dei dati.....
a volte scrive solo "ciao"....

Quello che mi chiedo è, a sto punto, se è possibile fare come ho fatto io e cioè scrivere su un file sia chiamando direttamente i metodi del suo stream, che chiamando i metodi sullo stream superiore ad esso collegato.
Non si può eventualmente duplicare l'oggetto FileStream e collegarci in uno il criptatore e il writer, e all'altro solo il writer?

non capisco aiutatemi!!!!!!

EDIT: tra l'altro, quando chiudo uno streamwriter, si chiudono anche tutti gli stream sotto e fin qui è scritto nell'msdn.... mentre se chiudo uno stream come il criptatore (che ha altri stream sotto) quelli sotto non si chiudono o no?????????