Partage
  • Partager sur Facebook
  • Partager sur Twitter

Couper un fichier en plusieurs parties

Sujet résolu
    22 avril 2011 à 19:48:52

    Bonjour,

    J'essaie de créer un programme pour couper des fichiers selon une taille donnée (le couper tout les 10 KO par exemple).

    Voici la fonction :
    Dim fileSize As Long = File.ReadAllBytes(FileTextBox.Text).LongLength
    
            If SplitByPartsRadioButton.Checked Then
    
            Else
                If Not SplitBySizeNumericUpDown.Value > fileSize Then
                    Dim splitSize As Long = 0
    
                    If SizeBRadioButton.Checked Then
                        splitSize = SplitBySizeNumericUpDown.Value
                    ElseIf SizeKBRadioButton.Checked Then
                        splitSize = SplitBySizeNumericUpDown.Value * 1024
                    ElseIf SizeMBRadioButton.Checked Then
                        splitSize = SplitBySizeNumericUpDown.Value * 1048576
                    Else
                        splitSize = SplitBySizeNumericUpDown.Value * 1073741824
                    End If
    
    
                    Dim myFileStream As New FileStream(FileTextBox.Text, FileMode.Open, FileAccess.Read, FileShare.Read, CInt(fileSize))
                    Dim partsNumber As Long = 0
    
                    For i As Long = 0 To fileSize Step splitSize
                        If Not splitSize > fileSize - (partsNumber * splitSize) Then
                            Dim myByteArray(splitSize) As Byte
    
                            myFileStream.Read(myByteArray, i, splitSize)
                            File.WriteAllBytes(FileTextBox.Text.Replace(Path.GetExtension(FileTextBox.Text), ".split" & partsNumber), myByteArray)
                        Else
                            Dim myByteArray(fileSize - (partsNumber * splitSize)) As Byte
    
                            myFileStream.Read(myByteArray, i, fileSize - (partsNumber * splitSize))
                            File.WriteAllBytes(FileTextBox.Text.Replace(Path.GetExtension(FileTextBox.Text), ".split" & partsNumber), myByteArray)
                        End If
    
                        partsNumber += 1
                    Next i
    
                    MessageBox.Show("Done!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
                Else
                    MessageBox.Show("Size too large!!!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
            End If
    


    Donc le programme récupère la taille du fichier, s'il reste assez d'octets pour le couper comme on l'a demandé on exécute ce code :
    If Not splitSize > fileSize - (partsNumber * splitSize) Then
        Dim myByteArray(splitSize) As Byte
    
        myFileStream.Read(myByteArray, i, splitSize)
        File.WriteAllBytes(FileTextBox.Text.Replace(Path.GetExtension(FileTextBox.Text), ".split" & i), myByteArray)
    

    Aucun problème tout fonctionne bien, quand c'est la 1ère boucle !

    La deuxième fois qu'il passe dans ce If, j'ai droit à :

    Citation : Visual Studio

    Offset et length étaient hors limites pour ce tableau ou bien le nombre est supérieur au nombre d'éléments de l'index à la fin de la collection source.






    Sinon, il ne reste plus assez d'octets, on bascule dans le Else :
    Else
        Dim myByteArray(fileSize - (partsNumber * splitSize)) As Byte
    
        myFileStream.Read(myByteArray, i, fileSize - (partsNumber * splitSize))
        File.WriteAllBytes(FileTextBox.Text.Replace(Path.GetExtension(FileTextBox.Text), ".split" & partsNumber), myByteArray)
    



    Mais là, sur la ligne du Read, y'a pas moyen, il me sort toujours cette erreur :

    Citation : Visual Studio

    Offset et length étaient hors limites pour ce tableau ou bien le nombre est supérieur au nombre d'éléments de l'index à la fin de la collection source.




    Pourtant toutes les tailles ont l'air d'être bonnes, non :-° ?


    Quelqu'un aurait une idée du problème ?


    Merci d'avance !


    EDIT : je me suis compliqué la vie ! En fait, l'offset s'avance automatiquement et moi je le faisais aussi de mon côté. Donc l'offset avançait du double de ce que je voulais. Avec de grands nombres, forcément l'index était en dehors du tableau.

    • Partager sur Facebook
    • Partager sur Twitter

    Couper un fichier en plusieurs parties

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown