denfer06
Messages postés12Date d'inscriptionlundi 21 juillet 2003StatutMembreDernière intervention12 février 2009
-
31 juil. 2008 à 15:41
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 2014
-
1 août 2008 à 14:10
Bonjour,
Je stocke dans ma base SQL des fichiers en tous genres et je voudrai lorsque j'en ressort plus d'un les zipper.
je récupérer mes données de la base SQL dans un object sqlDataReader mais ensuite je n'ai trouvé aucune solution pour directement zipper ces données.
La seule solution actuelles que j'ai trouvée est d'écrire les fichiers en local sur le disque, zipper puis supprimer les fichiers temporaires.
La question est:
Est ce qu'il est possible à partir d'un sqlDataReader de zipper le flux de données sans passer par la copie sur le disque ?
et si oui comment ?
denfer06
Messages postés12Date d'inscriptionlundi 21 juillet 2003StatutMembreDernière intervention12 février 2009 1 août 2008 à 09:53
En effet ça semble convenir à mes besoins.
est ce que tu as un exemple pour remplir un memoryStream à partir d'un SqlDataReader ?
je m'y perds un peu dans les parametres et autres bytebuffer
je n'arrive pas a définir la taille de mon memorystream
voila mon code:
// Prepares buffers and reading variables.
int bufferSize = 100;long startIndex 0, readSize 0, totalSize = 0;
byte[] byteBuffer = new byte[bufferSize];
if (!sqlDataReader.Read() || sqlDataReader.IsDBNull(0))
throw new Exception("No " + downloadedObject + " found!\nPlease contact the system administrator.");
MemoryStream fileMemoryStream = new MemoryStream();
totalSize = sqlDataReader.GetBytes(0, startIndex, null, 0, 0);
readSize = sqlDataReader.GetBytes(0, startIndex, byteBuffer, 0, bufferSize);
// Continue reading and writing while there are bytes beyond the size of the buffer.
while (readSize == bufferSize)
{
fileMemoryStream.Write(byteBuffer, (int)startIndex, (int)(readSize));
fileMemoryStream.Flush();
// Reposition the start index to the end of the last buffer and fill the buffer.
startIndex += bufferSize;
readSize = sqlDataReader.GetBytes(0, startIndex, byteBuffer, 0, bufferSize);
}
denfer06
Messages postés12Date d'inscriptionlundi 21 juillet 2003StatutMembreDernière intervention12 février 2009 1 août 2008 à 10:33
j'ai changé la commande :
fileMemoryStream.Write(byteBuffer, (int)startIndex, (
int)(readSize));
par
fileMemoryStream.Write(byteBuffer, 0, (
int)(readSize));
et ça semble aller plus loin
mon zip est créé mais je ne peux pas récuperer les fichiers:
les fichiers semblent corrompu : Invalide compressed data to inflate
size, ratio, packedsont à 0 => pas bon signe
si tu as une idée
Vous n’avez pas trouvé la réponse que vous recherchez ?