using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Npgsql;
using NpgsqlTypes;
namespace File_downloader
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
NpgsqlConnection conn = new NpgsqlConnection("-----");
conn.Open();
NpgsqlCommand commande;
NpgsqlParameter param;
commande = new NpgsqlCommand("SELECT syn_notes.titre, syn_notes.pieces_jointes, syn_fichiers.filename from syn_notes LEFT JOIN syn_fichiers ON syn_notes.pieces_jointes=syn_fichiers.id where syn_notes.id=:id", conn);
param = new NpgsqlParameter(":id", DbType.Int32);
param.Value = Convert.ToInt32(textBox1.Text);
commande.Parameters.Add(param);
commande.Prepare();
NpgsqlDataReader lecture = commande.ExecuteReader();
//De par la structure de la base de données, il n'y a qu'un fichier joint par note possible.
label1.Text = "Aucun fichier lié";
label2.Text = "";
while (lecture.Read())
{
toolTip1.Show(lecture.GetValue(0).ToString(), textBox1);
label1.Text = lecture.GetValue(2).ToString();
label2.Text = lecture.GetValue(1).ToString();
button2.Enabled = true;
}
conn.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
saveFileDialog1.FileName = label1.Text;
saveFileDialog1.ShowDialog();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
int compteur = 0, nombre = 0;
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(new BufferedStream(fs));
NpgsqlConnection conn = new NpgsqlConnection("---");
conn.Open();
NpgsqlCommand commande;
NpgsqlParameter param;
//On récupère le nombre de chunks dans la table correspondant à ce fichier.
commande = new NpgsqlCommand("SELECT count(splitid) FROM syn_contenu_fichiers WHERE fichier=:idfichier", conn);
param = new NpgsqlParameter(":idfichier", DbType.Int32);
param.Value = Convert.ToInt32(label2.Text);
commande.Parameters.Add(param);
commande.Prepare();
nombre = Convert.ToInt32(commande.ExecuteScalar());
while (compteur < nombre)//on récupère et écrit chunk après chunk ...
{
progressBar1.Value = (compteur * 100) / nombre;
progressBar1.Refresh();
commande = new NpgsqlCommand("select contenu from syn_contenu_fichiers where fichier=" + Convert.ToInt32(label2.Text) + " AND splitid=" + compteur, conn);
Byte[] result = (Byte[])commande.ExecuteScalar();
bw.Write(result);
compteur++;
}
progressBar1.Value = 100;
progressBar1.Refresh();
MessageBox.Show("Download du fichier terminé avec succès !", "DL OK !", MessageBoxButtons.OK, MessageBoxIcon.Information);
bw.Flush();
fs.Close();
bw.Close();
conn.Close();
}
}
}