begin process at 2010 02 09 15:11:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Compression & Split

 > ACCÉS BINAIRE : SPLITTEUR DE FICHIERS EN VB.NET

ACCÉS BINAIRE : SPLITTEUR DE FICHIERS EN VB.NET


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Compression & Split Source .NET ( DotNet ) Niveau :Débutant Date de création :05/02/2003 Date de mise à jour :26/01/2004 00:49:55 Vu / téléchargé :7 906 / 303

Auteur : hvb

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note


 Description

Voila, d'habitude j'essaye de ne pas mettre de projets mais juste des procédures ou fonctions, mais apres une petit prise de tete de 20mn sur comment j'allais le présenter, j'ai abandonner pour finalement mettre la beta 1 du projet (le design laissera comprendre à lui seul pkoi "beta 1" lol).

Il y a un .reg qui montre les lignes à écrire pour ajouter le prog au menu contextuel (ceci en prenant en compte que le .exe est copié dans le dossier Winnt/Windows de votre system) ,ce pour ne pas mettre le setup.

J'ai essayer de commenter le code, qui est assez simple mais parfois peut etre un peu fouilli... je repondrais à vos questions avec joie si vous ne comprenez pas qqc .


Si il reste un bug,  je m'en excuse, les tests de ses propres applis sont toujours insufisants selon mon patron... :) Prevenez moi si vous en detectez un svp (vous pouvez gueuler si vous voulez)

UPDATE : et ben dis donc....pendant + de 6 mois j'ai laisser une version betement bugger qui "desplittait" mal... un "-1" mal placé qui m'oblige à m'excuser...

Source

  • Imports System.IO
  • Imports System
  • Imports Microsoft.Win32
  • Public Class Form1
  • Inherits System.Windows.Forms.Form
  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • Dim args As String
  • If hb_inside(Environment.CommandLine, "Bpath ", " Epath") <> "" Then
  • args = hb_inside(Environment.CommandLine, "Bpath ", " Epath") 'on check si les arguments contiennent qqc entre Bpath et Epath (ne s'executera que si un fichier est appelé par le menu contextuel, et si vous avez lancer le .reg), si c'est le cas
  • Else
  • If Environment.GetCommandLineArgs.GetUpperBound(0) >= 1 Then 'si ce n'est pas le cas, on regarde si il y a + de 1 ligne d'arguments
  • If IO.File.Exists(Environment.GetCommandLineArgs(1)) Then 'si oui on regarde si la deuxieme ligne est un fichier (ne se passera que si vous glissez un fichier sur le .exe
  • args = Environment.GetCommandLineArgs(1)
  • End If
  • End If
  • End If
  • If args <> "" Then 'si on a un fichier sur lequel travailler dans les arguments :
  • If IO.File.Exists(args) Then 'on check si le fichier existe
  • If LCase(Mid(args, Len(args) - 3, 4)) = ".hbs" Then 'on check si c'est un fichier .hbs (splitté)
  • 'si oui alors :
  • Dim chemin1 As String = args
  • Dim nbrfile As Integer = get_nbrfile(chemin1) 'on appele la fonction get_nbrfile qui renvoie le nbre de fichiers splitté du groupe HBS
  • Dim temp As String
  • temp = Mid(chemin1, 1, Len(chemin1) - 4) 'ceci renvoie le nom de fichier d'origine sans le .hbs
  • Dim chemin2(nbrfile) As String 'on creer un tableau à une dimension dont le nbre de cellules est = au nbre de fichiers hbs + 1 (les cellules debutent à 0)
  • Dim i As Integer
  • For i = 1 To nbrfile
  • chemin2(i) = Replace(chemin1, get_nbrcurrentfile(chemin1) & Mid(chemin1, InStrRev(chemin1, "_")), i.ToString & Mid(chemin1, InStrRev(chemin1, "_"))) 'on place les chemins de touts les fichiers splitté grace a cette boucle dans laquel on va remplacer le numero du fichier par tts les numeros du groupe (pas clair...ouais bah...)
  • Next
  • Dim cheminfin As String = Mid(temp, 1, InStrRev(temp, ".") - 1)
  • 'on propose le choix du nom de fichiers à l'utilisateur
  • sf1.Title = "Enregistrer le fichier sous"
  • sf1.Filter = "*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1) & "|*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1)
  • sf1.FileName = Mid(cheminfin, InStrRev(cheminfin, "\") + 1, Len(cheminfin) - InStrRev(cheminfin, "\"))
  • sf1.ShowDialog()
  • If sf1.FileName = "" Then Exit Sub
  • pathsource2.Text = args
  • 'On affiche le nbre de fichiers et la taille du fichier a despliter:
  • lblnbrfile.Text = "Nombre de fichiers .hbs :" & get_nbrfile(pathsource2.Text)
  • lbllngfiles.Text = "Taille des fichiers .hbs :" & (FileLen(pathsource2.Text) / 1024).ToString & " Ko (" & FileLen(pathsource2.Text) & " octets )"
  • lbllnglfile.Text = "Taille du dernier fichier .hbs :" & (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")) / 1024).ToString & " Ko (" & FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text) & "_")).ToString & " octets)"
  • Dim tailledesplit As Long = (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_"))))
  • Dim lentaille As Integer = tailledesplit.ToString.Length
  • Select Case lentaille
  • Case Is <= 3
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit.ToString & " Octets"
  • Case Is > 3
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit / 1024.ToString & " Ko (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
  • Case Is > 6
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & (tailledesplit / 1024) / 1024.ToString & " Mo (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
  • Case Is > 9
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & ((tailledesplit / 1024) / 1024) / 1024.ToString & " Go (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
  • End Select
  • unsplit(nbrfile, chemin2, sf1.FileName) 'on lance la procedure unsplit qui specifie le nbre de fichiers, le tableau contenant les chemins des fichiers du groupe HBS et le chemin de fichier de sortie
  • TabControl1.SelectedTab = Tab2
  • Else
  • 'si ce n'est pas un fichier .hbs :
  • pathsource.Text = args
  • 'On calcul la taille du fichier sources et des "futurs" fichiers .hbs selon la valeur de nbrsplit
  • Dim lnginit As Long = FileLen(pathsource.Text)
  • Dim lngsplit As Long = lnginit / nbrsplit.Value
  • Dim lnglastsplit As Long
  • If lngsplit < CDec(lnginit / nbrsplit.Value) Then lngsplit += 1
  • lnglastsplit = lnginit - (lngsplit * (nbrsplit.Value - 1))
  • Dim taillesource As Long = FileLen(pathsource.Text)
  • Dim lentaille As Integer = taillesource.ToString.Length
  • 'Calcul la taille du fichier source et l'affiche
  • Select Case lentaille
  • Case Is <= 3
  • lbllngsource.Text = "Taille du fichier à spliter :" & taillesource.ToString & " Octets"
  • Case Is > 3
  • lbllngsource.Text = "Taille du fichier à spliter :" & taillesource / 1024.ToString & " Ko (" & taillesource.ToString & " Octets)"
  • Case Is > 6
  • lbllngsource.Text = "Taille du fichier à spliter :" & (taillesource / 1024) / 1024.ToString & " Mo (" & taillesource.ToString & " Octets)"
  • Case Is > 9
  • lbllngsource.Text = "Taille du fichier à spliter :" & ((taillesource / 1024) / 1024) / 1024.ToString & " Go (" & taillesource.ToString & " Octets)"
  • End Select
  • 'affiche la taille des "futurs" fichiers splittés
  • lngfiles.Text = "Tailles des fichiers splittés: " & lngsplit.ToString
  • lnglfile.Text = "Taille du dernier fichier splitté : " & lnglastsplit.ToString
  • End If
  • End If
  • End If
  • End Sub
  • Private Sub split(ByVal nbrfile As Integer, ByVal chemin1 As String)
  • Dim lnginit As Long
  • Dim lngsplit As Long
  • Dim lnglastsplit As Long
  • Dim worktime As Long = Environment.TickCount 'on garde la valeur du tickcount (qui renvoie le nbre de millisecondes ecoulées depuis le demarrage de windows) pour calculer le temps d'execution de la procédure
  • Dim hb As New IO.BinaryReader(IO.File.OpenRead(chemin1)) 'on defini donc hb comme "binaryreader" , et on y ouvre le chemin contenu dans la string chemin1
  • Dim file_a(FileLen(chemin1)) As Byte 'on crée un tableau de byte donc le nbre de cellules est egale à la taille du fichiers en octets
  • Dim i As Integer
  • hb.BaseStream.Read(file_a, 0, FileLen(chemin1)) 'on lit le fichier dans les tableau teststr
  • 'on calcul la tailles des fichiers .hbs selon le nbre de splits demandés
  • lnginit = FileLen(chemin1)
  • lngsplit = lnginit / nbrfile
  • If lngsplit > CDec(lnginit / nbrfile) Then lngsplit += 1
  • lnglastsplit = lnginit - (lngsplit * (nbrfile - 1))
  • 'ecriture des fichiers .hbs, sauf le dernier qui n'aura surement pas la meme taille :
  • For i = 0 To nbrfile - 2
  • Dim hbwrite As New IO.BinaryWriter(IO.File.OpenWrite(chemin1 & "." & (i + 1).ToString & "_" & nbrfile.ToString & ".hbs"))
  • hbwrite.BaseStream.Write(file_a, (i * lngsplit), lngsplit)
  • hbwrite.Close()
  • hbwrite = Nothing
  • Application.DoEvents()
  • Next i
  • 'ecriture maintenant du dernier fichiers hbs, qui doit faire qq octets de moins que les autres, selon la taille du fichier source
  • Dim hbwrite2 As New IO.BinaryWriter(IO.File.OpenWrite(chemin1 & "." & (i + 1).ToString & "_" & nbrfile.ToString & ".hbs"))
  • hbwrite2.BaseStream.Write(file_a, ((nbrfile - 1) * lngsplit), lnglastsplit)
  • hbwrite2.Close()
  • Dim splittm As String = ((CLng(Environment.TickCount) - worktime) / 1000).ToString & " secondes"
  • MsgBox("Le fichier " & chemin1 & " a été splitté avec succés en " & splittm)
  • End Sub
  • Private Sub unsplit(ByVal nbrfile As Integer, ByVal chemin2() As String, ByVal chemin1 As String)
  • Dim i As Integer
  • Dim lngsplit As Long
  • Dim file_A() As Byte 'on crée un tableau de byte donc le nbre de cellules est egale à la taille du fichiers en octets
  • Dim n As Long
  • Dim worktime As Long = Environment.TickCount 'on garde la valeur du tickcount (qui renvoie le nbre de millisecondes ecoulées depuis le demarrage de windows) pour calculer le temps d'execution de la procédure
  • For i = 0 To nbrfile - 1 'on lance la boucle le meme nbre de fois qu'il y a de fichiers
  • Dim hb As New IO.BinaryReader(IO.File.OpenRead(chemin2(i + 1)))
  • ReDim file_A(FileLen(chemin2(i + 1)) - 1) 'on redimensionne le tableau de la taille du fichier actuel
  • hb.BaseStream.Read(file_A, 0, FileLen(chemin2(i + 1))) 'DEBUG UPDATE !! 'on stocke dans ce tableau TOUTS les bytes du fichier
  • Dim fs As FileStream = New FileStream(chemin1, FileMode.OpenOrCreate) 'on defini le filestream
  • Dim wr As BinaryWriter = New BinaryWriter(fs) 'on defini wr comme objet d'ecriture binaire
  • wr.BaseStream.Seek(0, SeekOrigin.End) 'on defini le pointeur à la fin du fichier cible
  • wr.Write(file_A) 'on ecrit le contenu du tableau
  • fs.Close() 'on ferme tout
  • wr.Close() 'on ferme tout
  • hb.Close() 'on ferme tout
  • Next i
  • MsgBox("Effectué en " & ((CLng(Environment.TickCount) - worktime) / 1000).ToString & " secondes")
  • End Sub
  • Function get_nbrfile(ByVal firstpath As String) As Integer
  • 'fonction qui renvoie le nombre de fichiers d'un groupe à partir du chemin d'un fichier hbs
  • Dim temp As String
  • temp = Mid(firstpath, 1, Len(firstpath) - 4)
  • Dim pos As Integer
  • pos = InStrRev(temp, "_") + 1
  • Return CInt(Mid(temp, pos))
  • End Function
  • Function get_nbrcurrentfile(ByVal firstpath As String) As Integer
  • 'fonction qui renvoie le numero d'un fichier hbs a partir de son chemin
  • Dim temp As String
  • temp = Mid(firstpath, 1, Len(firstpath) - 4)
  • Dim pos(1) As Integer
  • pos(0) = InStrRev(temp, ".")
  • pos(1) = InStrRev(temp, "_")
  • Return CInt(Mid(firstpath, (pos(0) + 1), (pos(1) - pos(0) - 1)))
  • End Function
  • Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
  • 'boutton split, lance la demande de nom de fichier si cela n'a pas été fait
  • Dim chemin1 As String
  • If pathsource.Text = "" Then
  • of1.Title = "Choisissez le fichier à splitter"
  • of1.Filter = "*.*|*.*"
  • of1.InitialDirectory = Environment.CurrentDirectory
  • of1.ShowDialog()
  • If of1.FileName = "" Then
  • of1.Dispose()
  • Exit Sub
  • End If
  • chemin1 = of1.FileName
  • Else
  • chemin1 = pathsource.Text
  • End If
  • of1.Dispose()
  • Dim nbrfile As Integer = nbrsplit.Value
  • Dim chemin2(nbrfile) As String
  • split(nbrfile, chemin1)
  • End Sub
  • Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
  • 'selectionne et affiche les calculs de tailles d'un fichier à splitter deja vu au dessus
  • of1.Title = "Choisissez le fichier à splitter"
  • of1.Filter = "*.*|*.*"
  • of1.InitialDirectory = Environment.CurrentDirectory
  • of1.ShowDialog()
  • If of1.FileName <> "" Then
  • pathsource.Text = of1.FileName
  • Dim lnginit As Long
  • Dim lngsplit As Long
  • Dim lnglastsplit As Long
  • lnginit = FileLen(pathsource.Text)
  • lngsplit = lnginit / nbrsplit.Value
  • If lngsplit < CDec(lnginit / nbrsplit.Value) Then lngsplit += 1
  • lnglastsplit = lnginit - (lngsplit * (nbrsplit.Value - 1))
  • 'lnglastsplit = lngsplit + (lnginit Mod nbrsplit.Value)
  • Dim taillesource As Long = FileLen(pathsource.Text)
  • Dim lentaille As Integer = taillesource.ToString.Length
  • Select Case lentaille
  • Case Is <= 3
  • lbllngsource.Text = "Taille du fichier à spliter :" & taillesource.ToString & " Octets"
  • Case Is > 3
  • lbllngsource.Text = "Taille du fichier à spliter :" & taillesource / 1024.ToString & " Ko (" & taillesource.ToString & " Octets)"
  • Case Is > 6
  • lbllngsource.Text = "Taille du fichier à spliter :" & (taillesource / 1024) / 1024.ToString & " Mo (" & taillesource.ToString & " Octets)"
  • Case Is > 9
  • lbllngsource.Text = "Taille du fichier à spliter :" & ((taillesource / 1024) / 1024) / 1024.ToString & " Go (" & taillesource.ToString & " Octets)"
  • End Select
  • lngfiles.Text = "Tailles des fichiers splittés: " & lngsplit.ToString
  • lnglfile.Text = "Taille du dernier fichier splitté : " & lnglastsplit.ToString
  • End If
  • End Sub
  • Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
  • 'Selectionne un fichier .hbs, affiche la tailles de ces fichiers et en determine la taille du fichier a resplitter
  • 'le code a deja été utilise plus haut dans le form load, il aurait été plus pratique de faire un sub, je sais
  • of1.Title = "Choisissez un des fichiers d'un groupe hbs"
  • of1.Filter = "hbs files *.hbs|*.hbs"
  • of1.InitialDirectory = Environment.CurrentDirectory
  • of1.ShowDialog()
  • If of1.FileName = "" Then Exit Sub
  • pathsource2.Text = of1.FileName
  • lblnbrfile.Text = "Nombre de fichiers .hbs :" & get_nbrfile(pathsource2.Text)
  • lbllngfiles.Text = "Taille des fichiers .hbs :" & (FileLen(pathsource2.Text) / 1024).ToString & " Ko (" & FileLen(pathsource2.Text) & " octets )"
  • lbllnglfile.Text = "Taille du dernier fichier .hbs :" & (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")) / 1024).ToString & " Ko (" & FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text) & "_")).ToString & " octets)"
  • Dim tailledesplit As Long = (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_"))))
  • Dim lentaille As Integer = tailledesplit.ToString.Length
  • 'petit calcul de fichier, selon sa taille on l'affichera en octet, kilo octets, megaoctets ou giga octets :
  • Select Case lentaille
  • Case Is <= 3
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit.ToString & " Octets"
  • Case Is > 3
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit / 1024.ToString & " Ko (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
  • Case Is > 6
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & (tailledesplit / 1024) / 1024.ToString & " Mo (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
  • Case Is > 9
  • lblunsplitlng.Text = "Taille du fichier à déspliter :" & ((tailledesplit / 1024) / 1024) / 1024.ToString & " Go (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
  • End Select
  • End Sub
  • Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
  • 'si il n'y a pas encore de fichier .hbs selectionné, relance la selection
  • If pathsource2.Text = "" Then
  • of1.Title = "Choisissez un des fichiers d'un groupe hbs"
  • of1.Filter = "hbs files *.hbs|*.hbs"
  • of1.InitialDirectory = Environment.CurrentDirectory
  • of1.ShowDialog()
  • If of1.FileName = "" Then
  • of1.Dispose()
  • Exit Sub
  • End If
  • pathsource2.Text = of1.FileName
  • End If
  • Dim chemin1 As String = pathsource2.Text
  • of1.Dispose()
  • Dim nbrfile As Integer = get_nbrfile(chemin1)
  • Dim temp As String
  • temp = Mid(chemin1, 1, Len(chemin1) - 4)
  • 'depuis le chemin des fichiers .hbs et les mets dans la tableau chemin2()
  • Dim chemin2(nbrfile) As String
  • Dim i As Integer
  • For i = 1 To nbrfile
  • chemin2(i) = Replace(chemin1, get_nbrcurrentfile(chemin1) & Mid(chemin1, InStrRev(chemin1, "_")), i.ToString & Mid(chemin1, InStrRev(chemin1, "_")))
  • Next
  • Dim cheminfin As String = Mid(temp, 1, InStrRev(temp, ".") - 1)
  • sf1.Title = "Enregistrer le fichier sous"
  • sf1.Filter = "*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1) & "|*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1) 'on recupere l'extension du fichier source pour ne proposer l'enregistrement que sous cette extension
  • sf1.FileName = Mid(cheminfin, InStrRev(cheminfin, "\") + 1, Len(cheminfin) - InStrRev(cheminfin, "\")) 'on recupere le nom de fichier d'origine pour le proposer par defaut à l'enregistrement
  • sf1.ShowDialog()
  • If sf1.FileName = "" Then Exit Sub
  • 'lance la function unsplit
  • unsplit(nbrfile, chemin2, sf1.FileName)
  • End Sub
  • Private Sub nbrsplit_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nbrsplit.ValueChanged
  • 'A chaque fois que la valeur est changé, on recalcule la taille des fichiers
  • If pathsource.Text = "" Then Exit Sub
  • Dim lnginit As Long
  • Dim lngsplit As Long
  • Dim lnglastsplit As Long
  • 'On recalcul la taille de l'eventuel split :
  • lnginit = FileLen(pathsource.Text)
  • lngsplit = lnginit / nbrsplit.Value
  • If lngsplit < CDec(lnginit / nbrsplit.Value) Then lngsplit += 1
  • lnglastsplit = lnginit - (lngsplit * (nbrsplit.Value - 1))
  • Dim taillesource As Long = FileLen(pathsource.Text)
  • Dim lentaille As Integer = taillesource.ToString.Length
  • 'petit calcul de fichier, selon sa taille on l'affichera en octet, kilo octets, megaoctets ou giga octets :
  • Select Case lentaille
  • Case Is <= 3
  • lbllngsource.Text = "Taille du fichier à spliter :" & taillesource.ToString & " Octets"
  • Case Is > 3
  • lbllngsource.Text = "Taille du fichier à spliter :" & taillesource / 1024.ToString & " Ko (" & taillesource.ToString & " Octets)"
  • Case Is > 6
  • lbllngsource.Text = "Taille du fichier à spliter :" & (taillesource / 1024) / 1024.ToString & " Mo (" & taillesource.ToString & " Octets)"
  • Case Is > 9
  • lbllngsource.Text = "Taille du fichier à spliter :" & ((taillesource / 1024) / 1024) / 1024.ToString & " Go (" & taillesource.ToString & " Octets)"
  • End Select
  • lngfiles.Text = "Tailles des fichiers splittés: " & lngsplit.ToString
  • lnglfile.Text = "Taille du dernier fichier splitté : " & lnglastsplit.ToString
  • End Sub
  • Public Function hb_inside(ByVal source As String, ByVal stravant As String, ByVal strapres As String)
  • 'fonction qui renvoie ce qu'il y a entre deux sous-string, dans une string
  • If InStr(1, source, stravant) > 0 Then
  • If InStr((InStr(1, source, stravant)), source, strapres) > 0 Then
  • If Mid(source, (InStr(1, source, stravant) + Len(stravant)), InStr((InStr(1, source, stravant) + Len(stravant)), source, strapres) - (InStr(1, source, stravant) + Len(stravant))) <> "" Then
  • Return Mid(source, (InStr(1, source, stravant) + Len(stravant)), InStr((InStr(1, source, stravant) + Len(stravant)), source, strapres) - (InStr(1, source, stravant) + Len(stravant)))
  • End If
  • End If
  • End If
  • End Function
  • End Class
Imports System.IO
Imports System
Imports Microsoft.Win32


Public Class Form1
    Inherits System.Windows.Forms.Form


 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim args As String
        If hb_inside(Environment.CommandLine, "Bpath ", " Epath") <> "" Then
            args = hb_inside(Environment.CommandLine, "Bpath ", " Epath") 'on check si les arguments contiennent qqc entre Bpath et Epath (ne s'executera que si un fichier est appelé par le menu contextuel, et si vous avez lancer le .reg), si c'est le cas
        Else
            If Environment.GetCommandLineArgs.GetUpperBound(0) >= 1 Then 'si ce n'est pas le cas, on regarde si il y a + de 1 ligne d'arguments
                If IO.File.Exists(Environment.GetCommandLineArgs(1)) Then 'si oui on regarde si la deuxieme ligne est un fichier (ne se passera que si vous glissez un fichier sur le .exe
                    args = Environment.GetCommandLineArgs(1)
                End If
            End If
        End If

        If args <> "" Then 'si on a un fichier sur lequel travailler dans les arguments :
            If IO.File.Exists(args) Then 'on check si le fichier existe

                If LCase(Mid(args, Len(args) - 3, 4)) = ".hbs" Then 'on check si c'est un fichier .hbs (splitté)
                    'si oui alors :
                    Dim chemin1 As String = args
                    Dim nbrfile As Integer = get_nbrfile(chemin1) 'on appele la fonction get_nbrfile qui renvoie le nbre de fichiers splitté du groupe HBS
                    Dim temp As String
                    temp = Mid(chemin1, 1, Len(chemin1) - 4) 'ceci renvoie le nom de fichier d'origine sans le .hbs
                    Dim chemin2(nbrfile) As String 'on creer un tableau à une dimension dont le nbre de cellules est = au nbre de fichiers hbs + 1 (les cellules debutent à 0)
                    Dim i As Integer
                    For i = 1 To nbrfile
                        chemin2(i) = Replace(chemin1, get_nbrcurrentfile(chemin1) & Mid(chemin1, InStrRev(chemin1, "_")), i.ToString & Mid(chemin1, InStrRev(chemin1, "_"))) 'on place les chemins de touts les fichiers splitté grace a cette boucle dans laquel on va remplacer le numero du fichier par tts les numeros du groupe (pas clair...ouais bah...)
                    Next
                    Dim cheminfin As String = Mid(temp, 1, InStrRev(temp, ".") - 1)
                    'on propose le choix du nom de fichiers à l'utilisateur
                    sf1.Title = "Enregistrer le fichier sous"
                    sf1.Filter = "*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1) & "|*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1)
                    sf1.FileName = Mid(cheminfin, InStrRev(cheminfin, "\") + 1, Len(cheminfin) - InStrRev(cheminfin, "\"))
                    sf1.ShowDialog()
                    If sf1.FileName = "" Then Exit Sub
                    pathsource2.Text = args


                    'On affiche le nbre de fichiers et la taille du fichier a despliter:
                    lblnbrfile.Text = "Nombre de fichiers .hbs :" & get_nbrfile(pathsource2.Text)
                    lbllngfiles.Text = "Taille des fichiers .hbs :" & (FileLen(pathsource2.Text) / 1024).ToString & " Ko (" & FileLen(pathsource2.Text) & " octets )"
                    lbllnglfile.Text = "Taille du dernier fichier .hbs :" & (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")) / 1024).ToString & " Ko (" & FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text) & "_")).ToString & " octets)"
                    Dim tailledesplit As Long = (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_"))))
                    Dim lentaille As Integer = tailledesplit.ToString.Length
                    Select Case lentaille
                        Case Is <= 3
                            lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit.ToString & " Octets"
                        Case Is > 3
                            lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit / 1024.ToString & " Ko (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
                        Case Is > 6
                            lblunsplitlng.Text = "Taille du fichier à déspliter :" & (tailledesplit / 1024) / 1024.ToString & " Mo (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
                        Case Is > 9
                            lblunsplitlng.Text = "Taille du fichier à déspliter :" & ((tailledesplit / 1024) / 1024) / 1024.ToString & " Go (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
                    End Select

                    unsplit(nbrfile, chemin2, sf1.FileName) 'on lance la procedure unsplit qui specifie le nbre de fichiers, le tableau contenant les chemins des fichiers du groupe HBS et le chemin de fichier de sortie
                    TabControl1.SelectedTab = Tab2

                Else
                    'si ce n'est pas un fichier .hbs :
                    pathsource.Text = args

                    'On calcul la taille du fichier sources et des "futurs" fichiers .hbs selon la valeur de nbrsplit
                    Dim lnginit As Long = FileLen(pathsource.Text)
                    Dim lngsplit As Long = lnginit / nbrsplit.Value
                    Dim lnglastsplit As Long
                    If lngsplit < CDec(lnginit / nbrsplit.Value) Then lngsplit += 1
                    lnglastsplit = lnginit - (lngsplit * (nbrsplit.Value - 1))

                    Dim taillesource As Long = FileLen(pathsource.Text)
                    Dim lentaille As Integer = taillesource.ToString.Length

                    'Calcul la taille du fichier source et l'affiche
                    Select Case lentaille
                        Case Is <= 3
                            lbllngsource.Text = "Taille du fichier à spliter :" & taillesource.ToString & " Octets"
                        Case Is > 3
                            lbllngsource.Text = "Taille du fichier à spliter :" & taillesource / 1024.ToString & " Ko (" & taillesource.ToString & " Octets)"
                        Case Is > 6
                            lbllngsource.Text = "Taille du fichier à spliter :" & (taillesource / 1024) / 1024.ToString & " Mo (" & taillesource.ToString & " Octets)"
                        Case Is > 9
                            lbllngsource.Text = "Taille du fichier à spliter :" & ((taillesource / 1024) / 1024) / 1024.ToString & " Go (" & taillesource.ToString & " Octets)"
                    End Select
                    'affiche la taille des "futurs" fichiers splittés
                    lngfiles.Text = "Tailles des fichiers splittés: " & lngsplit.ToString
                    lnglfile.Text = "Taille du dernier fichier splitté : " & lnglastsplit.ToString
                End If
            End If
        End If
    End Sub

    Private Sub split(ByVal nbrfile As Integer, ByVal chemin1 As String)
        Dim lnginit As Long
        Dim lngsplit As Long
        Dim lnglastsplit As Long
        Dim worktime As Long = Environment.TickCount 'on garde la valeur du tickcount (qui renvoie le nbre de millisecondes ecoulées depuis le demarrage de windows) pour calculer le temps d'execution de la procédure
        Dim hb As New IO.BinaryReader(IO.File.OpenRead(chemin1)) 'on defini donc hb comme "binaryreader" , et on y ouvre le chemin contenu dans la string chemin1
        Dim file_a(FileLen(chemin1)) As Byte 'on crée un tableau de byte donc le nbre de cellules est egale à la taille du fichiers en octets
        Dim i As Integer

        hb.BaseStream.Read(file_a, 0, FileLen(chemin1)) 'on lit le fichier dans les tableau teststr

        'on calcul la tailles des fichiers .hbs selon le nbre de splits demandés
        lnginit = FileLen(chemin1)
        lngsplit = lnginit / nbrfile
        If lngsplit > CDec(lnginit / nbrfile) Then lngsplit += 1
        lnglastsplit = lnginit - (lngsplit * (nbrfile - 1))

        'ecriture des fichiers .hbs, sauf le dernier qui n'aura surement pas la meme taille :
        For i = 0 To nbrfile - 2
            Dim hbwrite As New IO.BinaryWriter(IO.File.OpenWrite(chemin1 & "." & (i + 1).ToString & "_" & nbrfile.ToString & ".hbs"))
            hbwrite.BaseStream.Write(file_a, (i * lngsplit), lngsplit)
            hbwrite.Close()
            hbwrite = Nothing
            Application.DoEvents()
        Next i

        'ecriture maintenant du dernier fichiers hbs, qui doit faire qq octets de moins que les autres, selon la taille du fichier source
        Dim hbwrite2 As New IO.BinaryWriter(IO.File.OpenWrite(chemin1 & "." & (i + 1).ToString & "_" & nbrfile.ToString & ".hbs"))
        hbwrite2.BaseStream.Write(file_a, ((nbrfile - 1) * lngsplit), lnglastsplit)
        hbwrite2.Close()

        Dim splittm As String = ((CLng(Environment.TickCount) - worktime) / 1000).ToString & " secondes"
        MsgBox("Le fichier " & chemin1 & " a été splitté avec succés en " & splittm)
    End Sub

    Private Sub unsplit(ByVal nbrfile As Integer, ByVal chemin2() As String, ByVal chemin1 As String)
        Dim i As Integer
        Dim lngsplit As Long
        Dim file_A() As Byte 'on crée un tableau de byte donc le nbre de cellules est egale à la taille du fichiers en octets
        Dim n As Long
        Dim worktime As Long = Environment.TickCount 'on garde la valeur du tickcount (qui renvoie le nbre de millisecondes ecoulées depuis le demarrage de windows) pour calculer le temps d'execution de la procédure
        For i = 0 To nbrfile - 1 'on lance la boucle le meme nbre de fois qu'il y a de fichiers
            Dim hb As New IO.BinaryReader(IO.File.OpenRead(chemin2(i + 1)))
            ReDim file_A(FileLen(chemin2(i + 1)) - 1) 'on redimensionne le tableau de la taille du fichier actuel
            hb.BaseStream.Read(file_A, 0, FileLen(chemin2(i + 1))) 'DEBUG UPDATE !!  'on stocke dans ce tableau TOUTS les bytes du fichier
            Dim fs As FileStream = New FileStream(chemin1, FileMode.OpenOrCreate) 'on defini le filestream
            Dim wr As BinaryWriter = New BinaryWriter(fs) 'on defini wr comme objet d'ecriture binaire
            wr.BaseStream.Seek(0, SeekOrigin.End) 'on defini le pointeur à la fin du fichier cible
            wr.Write(file_A) 'on ecrit le contenu du tableau
            fs.Close() 'on ferme tout
            wr.Close() 'on ferme tout
            hb.Close() 'on ferme tout
        Next i
        MsgBox("Effectué en " & ((CLng(Environment.TickCount) - worktime) / 1000).ToString & " secondes")
    End Sub


    Function get_nbrfile(ByVal firstpath As String) As Integer
        'fonction qui renvoie le nombre de fichiers d'un groupe à partir du chemin d'un fichier hbs
        Dim temp As String
        temp = Mid(firstpath, 1, Len(firstpath) - 4)
        Dim pos As Integer
        pos = InStrRev(temp, "_") + 1
        Return CInt(Mid(temp, pos))
    End Function

    Function get_nbrcurrentfile(ByVal firstpath As String) As Integer
        'fonction qui renvoie le numero d'un fichier hbs a partir de son chemin
        Dim temp As String
        temp = Mid(firstpath, 1, Len(firstpath) - 4)
        Dim pos(1) As Integer
        pos(0) = InStrRev(temp, ".")
        pos(1) = InStrRev(temp, "_")
        Return CInt(Mid(firstpath, (pos(0) + 1), (pos(1) - pos(0) - 1)))
    End Function

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        'boutton split, lance la demande de nom de fichier si cela n'a pas été fait
        Dim chemin1 As String
        If pathsource.Text = "" Then
            of1.Title = "Choisissez le fichier à splitter"
            of1.Filter = "*.*|*.*"
            of1.InitialDirectory = Environment.CurrentDirectory
            of1.ShowDialog()
            If of1.FileName = "" Then
                of1.Dispose()
                Exit Sub
            End If
            chemin1 = of1.FileName
        Else
            chemin1 = pathsource.Text
        End If
        of1.Dispose()
        Dim nbrfile As Integer = nbrsplit.Value
        Dim chemin2(nbrfile) As String
        split(nbrfile, chemin1)

    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        'selectionne et affiche les calculs de tailles d'un fichier à splitter deja vu au dessus
        of1.Title = "Choisissez le fichier à splitter"
        of1.Filter = "*.*|*.*"
        of1.InitialDirectory = Environment.CurrentDirectory
        of1.ShowDialog()
        If of1.FileName <> "" Then
            pathsource.Text = of1.FileName
            Dim lnginit As Long
            Dim lngsplit As Long
            Dim lnglastsplit As Long

            lnginit = FileLen(pathsource.Text)
            lngsplit = lnginit / nbrsplit.Value
            If lngsplit < CDec(lnginit / nbrsplit.Value) Then lngsplit += 1
            lnglastsplit = lnginit - (lngsplit * (nbrsplit.Value - 1))
            'lnglastsplit = lngsplit + (lnginit Mod nbrsplit.Value)
            Dim taillesource As Long = FileLen(pathsource.Text)
            Dim lentaille As Integer = taillesource.ToString.Length



            Select Case lentaille
                Case Is <= 3
                    lbllngsource.Text = "Taille du fichier à spliter :" & taillesource.ToString & " Octets"
                Case Is > 3
                    lbllngsource.Text = "Taille du fichier à spliter :" & taillesource / 1024.ToString & " Ko (" & taillesource.ToString & " Octets)"
                Case Is > 6
                    lbllngsource.Text = "Taille du fichier à spliter :" & (taillesource / 1024) / 1024.ToString & " Mo (" & taillesource.ToString & " Octets)"
                Case Is > 9
                    lbllngsource.Text = "Taille du fichier à spliter :" & ((taillesource / 1024) / 1024) / 1024.ToString & " Go (" & taillesource.ToString & " Octets)"
            End Select
            lngfiles.Text = "Tailles des fichiers splittés: " & lngsplit.ToString
            lnglfile.Text = "Taille du dernier fichier splitté : " & lnglastsplit.ToString
        End If
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        'Selectionne un fichier .hbs, affiche la tailles de ces fichiers et en determine la taille du fichier a resplitter
        'le code a deja été utilise plus haut dans le form load, il aurait été plus pratique de faire un sub, je sais
        of1.Title = "Choisissez un des fichiers d'un groupe hbs"
        of1.Filter = "hbs files *.hbs|*.hbs"
        of1.InitialDirectory = Environment.CurrentDirectory
        of1.ShowDialog()
        If of1.FileName = "" Then Exit Sub
        pathsource2.Text = of1.FileName
        lblnbrfile.Text = "Nombre de fichiers .hbs :" & get_nbrfile(pathsource2.Text)
        lbllngfiles.Text = "Taille des fichiers .hbs :" & (FileLen(pathsource2.Text) / 1024).ToString & " Ko (" & FileLen(pathsource2.Text) & " octets )"
        lbllnglfile.Text = "Taille du dernier fichier .hbs :" & (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")) / 1024).ToString & " Ko (" & FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text) & "_")).ToString & " octets)"

        Dim tailledesplit As Long = (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_"))))
        Dim lentaille As Integer = tailledesplit.ToString.Length

        'petit calcul de fichier, selon sa taille on l'affichera en octet, kilo octets, megaoctets ou giga octets :
        Select Case lentaille
            Case Is <= 3
                lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit.ToString & " Octets"
            Case Is > 3
                lblunsplitlng.Text = "Taille du fichier à déspliter :" & tailledesplit / 1024.ToString & " Ko (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
            Case Is > 6
                lblunsplitlng.Text = "Taille du fichier à déspliter :" & (tailledesplit / 1024) / 1024.ToString & " Mo (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
            Case Is > 9
                lblunsplitlng.Text = "Taille du fichier à déspliter :" & ((tailledesplit / 1024) / 1024) / 1024.ToString & " Go (" & (((FileLen(pathsource2.Text)) * (get_nbrfile(pathsource2.Text) - 1)) + (FileLen(Replace(pathsource2.Text, "." & get_nbrcurrentfile(pathsource2.Text).ToString & "_", "." & get_nbrfile(pathsource2.Text).ToString & "_")))).ToString & " Octets)"
        End Select
    End Sub

    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
        'si il n'y a pas encore de fichier .hbs selectionné, relance la selection
        If pathsource2.Text = "" Then
            of1.Title = "Choisissez un des fichiers d'un groupe hbs"
            of1.Filter = "hbs files *.hbs|*.hbs"
            of1.InitialDirectory = Environment.CurrentDirectory
            of1.ShowDialog()
            If of1.FileName = "" Then
                of1.Dispose()
                Exit Sub
            End If
            pathsource2.Text = of1.FileName
        End If
        Dim chemin1 As String = pathsource2.Text
        of1.Dispose()
        Dim nbrfile As Integer = get_nbrfile(chemin1)
        Dim temp As String
        temp = Mid(chemin1, 1, Len(chemin1) - 4)
        'depuis le chemin des fichiers .hbs et les mets dans la tableau chemin2()
        Dim chemin2(nbrfile) As String
        Dim i As Integer
        For i = 1 To nbrfile
            chemin2(i) = Replace(chemin1, get_nbrcurrentfile(chemin1) & Mid(chemin1, InStrRev(chemin1, "_")), i.ToString & Mid(chemin1, InStrRev(chemin1, "_")))
        Next
        Dim cheminfin As String = Mid(temp, 1, InStrRev(temp, ".") - 1)
        sf1.Title = "Enregistrer le fichier sous"
        sf1.Filter = "*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1) & "|*" & Mid(cheminfin, InStrRev(cheminfin, "."), Len(cheminfin) - InStrRev(cheminfin, ".") + 1) 'on recupere l'extension du fichier source pour ne proposer l'enregistrement que sous cette extension
        sf1.FileName = Mid(cheminfin, InStrRev(cheminfin, "\") + 1, Len(cheminfin) - InStrRev(cheminfin, "\")) 'on recupere le nom de fichier d'origine pour le proposer par defaut à l'enregistrement
        sf1.ShowDialog()
        If sf1.FileName = "" Then Exit Sub
        'lance la function unsplit
        unsplit(nbrfile, chemin2, sf1.FileName)
    End Sub

    Private Sub nbrsplit_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nbrsplit.ValueChanged
        'A chaque fois que la valeur est changé, on recalcule la taille des fichiers
        If pathsource.Text = "" Then Exit Sub
        Dim lnginit As Long
        Dim lngsplit As Long
        Dim lnglastsplit As Long
        'On recalcul la taille de l'eventuel split :
        lnginit = FileLen(pathsource.Text)
        lngsplit = lnginit / nbrsplit.Value
        If lngsplit < CDec(lnginit / nbrsplit.Value) Then lngsplit += 1
        lnglastsplit = lnginit - (lngsplit * (nbrsplit.Value - 1))
        Dim taillesource As Long = FileLen(pathsource.Text)
        Dim lentaille As Integer = taillesource.ToString.Length
        'petit calcul de fichier, selon sa taille on l'affichera en octet, kilo octets, megaoctets ou giga octets :
        Select Case lentaille
            Case Is <= 3
                lbllngsource.Text = "Taille du fichier à spliter :" & taillesource.ToString & " Octets"
            Case Is > 3
                lbllngsource.Text = "Taille du fichier à spliter :" & taillesource / 1024.ToString & " Ko (" & taillesource.ToString & " Octets)"
            Case Is > 6
                lbllngsource.Text = "Taille du fichier à spliter :" & (taillesource / 1024) / 1024.ToString & " Mo (" & taillesource.ToString & " Octets)"
            Case Is > 9
                lbllngsource.Text = "Taille du fichier à spliter :" & ((taillesource / 1024) / 1024) / 1024.ToString & " Go (" & taillesource.ToString & " Octets)"
        End Select
        lngfiles.Text = "Tailles des fichiers splittés: " & lngsplit.ToString
        lnglfile.Text = "Taille du dernier fichier splitté : " & lnglastsplit.ToString

    End Sub

    Public Function hb_inside(ByVal source As String, ByVal stravant As String, ByVal strapres As String)
        'fonction qui renvoie ce qu'il y a entre deux sous-string, dans une string 
        If InStr(1, source, stravant) > 0 Then
            If InStr((InStr(1, source, stravant)), source, strapres) > 0 Then
                If Mid(source, (InStr(1, source, stravant) + Len(stravant)), InStr((InStr(1, source, stravant) + Len(stravant)), source, strapres) - (InStr(1, source, stravant) + Len(stravant))) <> "" Then
                    Return Mid(source, (InStr(1, source, stravant) + Len(stravant)), InStr((InStr(1, source, stravant) + Len(stravant)), source, strapres) - (InStr(1, source, stravant) + Len(stravant)))
                End If
            End If
        End If
    End Function
End Class
 

 Conclusion

Ce n'est pas specialement original mais c'etait en partie pour voir les performances de cette methode à laquelle j'ai penser en cours (pas d'info nan...de dessin technique...arg!) ... le resultat est plutot correct, meme pour des gros fichiers types iso de 700Mo .
Laissez vos avis, remarques, critiques en commentaires :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) FOND DE FEUILLE ANIMÉ : DÉGRADÉ MOUVANT POUR ABOUT OU SPLASH...
Source avec Zip Source avec une capture Source .NET (Dotnet) FONT VIEWER : VISIONNEUSE DE POLICES SYSTEMES.
Source avec Zip Source avec une capture Source .NET (Dotnet) HBSNAPSHOTERV3.0 : GESTIONNAIRE DE CAPTURES D'ÉCRAN
Source avec Zip Source avec une capture Source .NET (Dotnet) JEU : PICROSS OU "PUZZLE JAPONAIS"
Source avec Zip Source .NET (Dotnet) [.NET2] COMPRESSION/DÉCOMPRESSION GZIP DE FICHIER GRÂCE À IO...

 Sources de la même categorie

Source .NET (Dotnet) DÉCODAGE YENC EN VB.NET par NINATECH
Source avec Zip Source avec une capture Source .NET (Dotnet) SEVENZIP CONSOLE par PWM63
Source avec Zip Source avec une capture Source .NET (Dotnet) VBZIP GESTION D'ARCHIVES AU FORMAT ZIP UTILISANT IONIC.UTIL... par gillardg
Source avec Zip Source .NET (Dotnet) ZLIB.NET : COMPRESSION ZIP AVEC VB.NET par bouv
Source avec Zip Source .NET (Dotnet) COMPRESSION SIMPLE D'IMAGES JPG par abdallah39

Commentaires et avis

Commentaire de pixelone le 29/04/2003 10:04:23

wouahahaaouuuu
a la deuxieme ligne je suis deja perdu

Commentaire de hvb le 29/04/2003 21:52:48

beuh...c'est pourtant commenté....

Commentaire de clemox le 03/08/2003 11:40:42

Moi ça n'a pas marcher (j'ai pris le zip), j'ai créé un fichier txt avec marqué "AZERTY" dedans, j'ai spliter, puis quand j'ai regroupé les fichiers, il y avait "AET" dans le nouveau txt :(
Je me sert peut-etre mal de ton logiciel .

Commentaire de hvb le 26/01/2004 00:43:36

effectivement il y a un gros bug... apres 6 mois j'avais meme pas vu ton commentaire...
je modifie ça tout de suite :
            hb.BaseStream.Read(file_A, 0, FileLen(chemin2(i + 1)) - 1)

il faut enlever le -1 intrus !!

Commentaire de Duaneur le 13/02/2005 12:58:13

oula !!!
ca c'est du code lol il est bien gros bien chau
je l'ai lu, pa tou suivi mais c'est élevé par rapor a mon niveau actuel.

Commentaire de hvb le 14/02/2005 12:17:37

lol "bien gros bien chaud"...
c'est surtout que c'est un de mes premiers codes en .NET et qui n'est pas optimisé du tout.
Le principe reste bon, mais il y a de nbreuses lignes inutiles, des repetitions, et surtout trop de sequelles de vb6 dans le code...
malheuresement, c'est fou comme j'ai la flemme de le remanier. Couplé à peu de temps libre, on peut dire que faut pas compter sur un update pour tout de suite...
mais je peux  te proposer mon aide via la messagerie de codes-source si tu veux.....

Commentaire de Sirocooo le 17/02/2005 19:26:56

Arretez les commentaires avec "on fait ceci, on fait cela"
le "on" ca fait amateur.

Commentaire de hvb le 18/02/2005 09:56:51

wahou... noooooon, ça me donne envie de pleurer... mon code "fait amateur"....tain...je suis degouté......je suis pas un 1337 c0d3r...gsoooooo...
...

Nan serieusement, malgré les quelques projets que j'ai pu realiser pour ma societé, je ne suis en rien developpeur pro'. Je suis actuellement en apprentissage, en alternance, mais orienté réseaux. donc j'assume totalement mon statut d'amateur, meme si ce code date d'il y a + de 2 ans maintenant.
Alors je laisse les "on". Et parle mieux, insolent!

Commentaire de Sirocooo le 18/02/2005 11:13:33

En fait je voulais dire que les commentaires "on"
c'est toujours les jeunes débutant qui les fonts.

C'est juste une remarque pour que tu cesse de les faire.
Je ne remets pas en cause ton code qui à l'air bon.
S'il est complétement de toi car on ne trouve pas des "On fait ceci, on fait cela"  sur tous les commentaires...

Aller sans rencune...

Commentaire de hvb le 18/02/2005 14:13:31

:( la je vais pleurer sans ironie...! lol
Si un bout de code n'est pas de moi, je le precise, je ne suis pas en quete de reconnaissance non meritée.
Mais je n'ai pas du tout le reflexe "commentaires", ce qui peut expliquer leur efficacité moyenne, car ajoutés 10mn avant de poster la source.

Mais pour le "on", je ne comprend vraiment pas en quoi c'est destiné qu'aux jeunes debutant, un commentaire c'est censé expliquer en français ce que fais ton code nan? C'est le cas ici. Je me prend peut etre pas assez la tete la dessus... ou peut être que c'est toi, geek, qui te prends trop la tete ... ^^'
Si tu as un réel bon argument pour me convaincre, je modifie le code (j'ai des trucs à ajouter) et je réecris touts les commentaires sans "on". :)
Et pour finir, rencune c'est rancune...hihi

Commentaire de Sirocooo le 18/02/2005 14:48:47

Pour ta gouverne, Il est conseillé d' écrire les
commentaires avant  de commencer à écrire le code.
De cette façon et machinalement, les commentaires deviennent plus explicites et moins rébarbatifs.

Pour finir c'est une bonne source qui marche bien... by


Commentaire de hvb le 18/02/2005 15:43:17

Bah c'est clair que ça c'est la methode propre et pratique... mais je commence rarement un projet dans l'optique de le distribuer, et je suis flemmard ET bordelique de nature, donc c'est vraiment pas la 1ere chose que je fais. mais tu as raison.
Cependant ( héhéhé) tu ne developpes toujours pas sur le pourquoi du "non-on", ;)

Et merci pour ton interet et ton avis sur la source

Commentaire de dragon le 08/07/2005 18:08:02

pour donner dequoi d'utile, des fonction tu connais ???
divise ton code en fonction, ça va déjà rendre ton code beaucoup plus clair et moins dur a lire

ensuite, ça donne rien de passer a .net si tu code pas en orienté objet. eh ... là faut soit un bon livre soit un cour. Bon oki, je dis pas que tu peux pas programmer en procédurale en énet, sauf que c'est juste que ton code sera lent pour rien. VB.net est plus lent que vb6.0. Par contre vb6.0 est vraiment basique a comparer .net

Commentaire de hvb le 08/07/2005 18:41:48

1) ta première phrase est incomprehensible. Le reste aussi difficile à lire que mon code. Tu sais coder mais pas écrire en français? :D
2) Ce code a deux ans et demi, j'ai repeter plusieurs fois dans les commentaires que j'avais vraiment la flemme de reprendre un projet aussi inutile. Donc j'approuve la critique mais la m.a.j, je la ferais quand j'aurais le temps...
3) Je suis presque convaincu que tu as tort pour vb.net, il est certes plus lent à charger, mais sur des calculs en boucle, il est bien plus puissant que vb6.

Commentaire de dragon le 08/07/2005 22:24:54

première phrase incompréhensible ??? à part un "s" manquant et un "a" au lieu d'un "à" le restant de la première phrase a pas d'erreur. Tu sais c'est quoi une fonction ???

pour .net oui il est plus lent dans les interfaces graphique, beaucoup plus de mémoire est utilisé et beaucoup plus d'évênement est déclaré. Être en C#, les évênement son déclaré manuellement, mais en VB.net, tout les évênements sont présent (les handles étant non nécessaire en vb.net a moins de créer le composant à la main)

j'ai pas dit de reprendre ton projet, je disait pour les projets futur de mieux découper en fonction. VB.Net a été copier du Java et le Java a été créé pour être programmé en orienté objet et non en procédurale. Je retournerais jamais sous vb6.0, sauf si obligation, mais pour un code écris au complet en une fonction, ça donne rien d'avoir passé a .net.

en plus, je suis tombé sur ta source, j'ai pas regardé la date de diffusion sur le site. En faisant une recherche ta source est tombé comme premier résultat ??? et ton nick me disait rien. donc ej t'ai considéré comme un débutant. désolé. Ça serait pareil pour moi si tu regardais mes premières sources. Par contre, je comprend toujours pas pourquoi ta source est tombé premier dasn les résultats ??? mais bon. En passant, non j'ai pas voter, je vote très rarement. Donc non je t,ai pas donné un 1/10. Par contre c'est bizarre, on dirait que tu as aucun vote mais tu as un 1/10 de moyenne lol. Petit bug ici

Commentaire de hvb le 09/07/2005 12:04:44

"pour donner dequoi d'utile, des fonction tu connais ???"
non vraiment crois moi, même si je sais aussi bien que toi ce qu'est une fonction, ta phrase veut strictement rien dire.

Tu prends un ton narquois pour rien... "tu connais les fonctions?", mec si tu viens faire l'eloge de la POO, parles moi d'autre chose que de fonctions... des class, de l'heritage, du surclassement, du theading... car meme en lisant ce vieux code, tu verras que des fonctions basique et procédures, j'en utilise, c'est juste que j'ai pas du tout optimiser ça à l'epoque. Peut être que je devrais t'expliquer ce que moi je sais sur la POO? ;) =)
Sans te manquer de resppect, j'ai regarder quelques sources que tu as posté, et j'ai rien à apprendre de toi...

Et pour la recherche, je sais pas ce que tu as cherché... et je connais pas le critères de la recherche de Nix.

Sans rancunes :p

Commentaire de psycho81 le 02/11/2005 12:05:15

mouah, que de bla bla pour un "on" à la noix ... Vous en oubliez presque le code qui était à l'origine ... Allez, un peu de sens civique, "on" se croirait dans une arène de combat. Perso, je trouve le code utile, bien que je préfère l'utilisation des tableau d'octets pour de tels traitements (au niveau temps d'écriture j'ai constaté que c'était plus performant).

Voili voilou

Bonne prog et ensemble programmons ! au lieu de nous pigner la gueule pour des futilités.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales