Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

IsolatedStorage et écriture fichier

2 réponses
Avatar
nans31
Bonjour,

J'ai des varbinary stockés dans sqlserver qui correspond à des fichiers pdf.
Je souhaite récupérer ces fichiers. Pour cela, pour pouvoir les ouvrir je
dois d'abord créer un fichier sur disque puis y ecrire les données dedans et
ensuite l'ouvrir dans un webbrowser.
Pour stocker le fichier sur disque j'utilise IsolatedStorage que propose
windows.
Mon probleme c'est que mes fichiers qui sont stockés en varbinary dans sql
server je les recupere en C# en tableau de bytes.

J'ai essayé ce code mais marche pas :(:

using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
using (StreamWriter writer = new StreamWriter(persistStream))
{
byte[] asciiBytes = Encoding.Convert(Encoding.Unicode,
Encoding.ASCII, t);
char[] asciiChars = new
char[Encoding.ASCII.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
Encoding.ASCII.GetChars(asciiBytes, 0,
asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
writer.Write(asciiChars);
writer.Flush();
persistStream.Flush();
persistStream.Close();


}


}

J'ai aussi essayé ce code mais ca ne marche pas non plus :

using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
using (StreamWriter writer = new StreamWriter(persistStream))
{
writer.Write(Encoding.Default.GetString(t));
writer.Flush();
persistStream.Flush();
persistStream.Close();
}


}

Et apres pour la lecture du fichier pdf je fais ca(ça, ça marche):
if (FileExists())
{
IsolatedStorageFile file =
IsolatedStorageFile.GetUserStoreForDomain();

oStream = new IsolatedStorageFileStream(FILENAME,
FileMode.Open, file);

string filePath = oStream.GetType().GetField("m_FullPath",
BindingFlags.Instance | BindingFlags.NonPublic).GetValue(oStream).ToString();
webBrowser1.Navigate(filePath);

}


Alors je sais plus trop quoi essayé pour que mon tableau de bytes s'ecrive
dans le fichier pdf qui se trouve dans le repertoire IsolatedStorage. Je sais
pas si utiliser un StreamWriter est une bonne idée?
De plus, je sais que quand je faisais avec File.WriteAllBytes ca marchais
mais si je fais avec ça je sais pas comment le lier à IsolatedStorage.

Si quelqu'un a une idée? Help!

2 réponses

Avatar
nans31
En fait c'est bon j'ai trouvé il fallait utiliser la sérialisation.
Je mets le code ca peut toujours servir pour qqn!!!!

code:
private const string FILENAME = "fichierTemp.pdf";

byte[] t = document.Document;


using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
//Serialise le tableau de bytes pour pouvoir l'ecrire dans
le fichier FILENAME
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(persistStream, t);
}
catch (SerializationException e)
{
throw;
}
finally
{
persistStream.Close();
}

}





"nans31" a écrit :

Bonjour,

J'ai des varbinary stockés dans sqlserver qui correspond à des fichiers pdf.
Je souhaite récupérer ces fichiers. Pour cela, pour pouvoir les ouvrir je
dois d'abord créer un fichier sur disque puis y ecrire les données dedans et
ensuite l'ouvrir dans un webbrowser.
Pour stocker le fichier sur disque j'utilise IsolatedStorage que propose
windows.
Mon probleme c'est que mes fichiers qui sont stockés en varbinary dans sql
server je les recupere en C# en tableau de bytes.

J'ai essayé ce code mais marche pas :(:

using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
using (StreamWriter writer = new StreamWriter(persistStream))
{
byte[] asciiBytes = Encoding.Convert(Encoding.Unicode,
Encoding.ASCII, t);
char[] asciiChars = new
char[Encoding.ASCII.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
Encoding.ASCII.GetChars(asciiBytes, 0,
asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
writer.Write(asciiChars);
writer.Flush();
persistStream.Flush();
persistStream.Close();


}


}

J'ai aussi essayé ce code mais ca ne marche pas non plus :

using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
using (StreamWriter writer = new StreamWriter(persistStream))
{
writer.Write(Encoding.Default.GetString(t));
writer.Flush();
persistStream.Flush();
persistStream.Close();
}


}

Et apres pour la lecture du fichier pdf je fais ca(ça, ça marche):
if (FileExists())
{
IsolatedStorageFile file =
IsolatedStorageFile.GetUserStoreForDomain();

oStream = new IsolatedStorageFileStream(FILENAME,
FileMode.Open, file);

string filePath = oStream.GetType().GetField("m_FullPath",
BindingFlags.Instance | BindingFlags.NonPublic).GetValue(oStream).ToString();
webBrowser1.Navigate(filePath);

}


Alors je sais plus trop quoi essayé pour que mon tableau de bytes s'ecrive
dans le fichier pdf qui se trouve dans le repertoire IsolatedStorage. Je sais
pas si utiliser un StreamWriter est une bonne idée?
De plus, je sais que quand je faisais avec File.WriteAllBytes ca marchais
mais si je fais avec ça je sais pas comment le lier à IsolatedStorage.

Si quelqu'un a une idée? Help!



Avatar
Gilles TOURREAU [MVP]
"nans31" a écrit dans le message de
news:
Bonjour,

J'ai des varbinary stockés dans sqlserver qui correspond à des fichiers
pdf.
Je souhaite récupérer ces fichiers. Pour cela, pour pouvoir les ouvrir je
dois d'abord créer un fichier sur disque puis y ecrire les données dedans
et
ensuite l'ouvrir dans un webbrowser.
Pour stocker le fichier sur disque j'utilise IsolatedStorage que propose
windows.
Mon probleme c'est que mes fichiers qui sont stockés en varbinary dans
sql
server je les recupere en C# en tableau de bytes.

J'ai essayé ce code mais marche pas :(:

using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
using (StreamWriter writer = new
StreamWriter(persistStream))
{
byte[] asciiBytes =
Encoding.Convert(Encoding.Unicode,
Encoding.ASCII, t);
char[] asciiChars = new
char[Encoding.ASCII.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
Encoding.ASCII.GetChars(asciiBytes, 0,
asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
writer.Write(asciiChars);
writer.Flush();
persistStream.Flush();
persistStream.Close();


}


}



Pourquoi vous convertissez votre fichier PDF Unicode en ASCII ?
Pourquoi utilisez vous un StreamWriter ?

Je dirais :

using (IsolatedStorageFileStream persistStream = new
IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
{
persistStream.Write(t, 0, t.Length);

}

Si vous utilisez des "using ()" il n'est pas nécessaire de faire un Flush
suivit d'un Close...

Cordialement

--
Gilles TOURREAU - MVP C#


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr