2009-09-10 6 views
0
int bufferlength = 12488; 
int pointer = 1; 
int offset = 0; 
int length = 0; 

FileStream fstwrite = new FileStream("D:\\Movie.wmv", FileMode.Create); 
while (pointer != 0) 
{ 
    byte[] buff = new byte[bufferlength]; 
    FileStream fst = new FileStream("E:\\Movie.wmv", FileMode.Open); 
    pointer = fst.Read(buff, 0, bufferlength); 
    fst.Close(); 
    fstwrite.Write(buff, offset , pointer); 
    offset += pointer; 
} 

J'ai utilisé le code ci-dessus pour diviser un fichier et placez-le dans d'autres drive.Im pas en mesure de régler le décalage correct et la longueur de cette routine quelqu'un peut me aider à résoudre ce problèmeproblème dans la division d'un fichier

fractionnement dans le sens, je le diviser en "x" kbs et le passer quelque part faire le même fichier dans un autre endroit

Je le trouve atlast, merci à evry celui qui a donné leurs réponses valeurble.

+0

Vous ne divisez pas un fichier. N'êtes-vous pas? – adatapost

+0

non im non, je veux juste le couper en "x" pas de kbs et le passer à un remotelocation et régénérer le fichier là.juste comme le transfert de fichiers dans ftp (ie dans de petits morceaux de données) – karthik

Répondre

6

Actuellement, vous lisez toujours depuis le début du fichier ... et même si vous ne vous seriez tout simplement être copier le fichier entier.

est ici un code qui sera fait diviser un seul fichier en plusieurs fichiers:

public static void SplitFile(string inputFile, 
          string outputPrefix, 
          int chunkSize) 
{ 
    byte[] buffer = new byte[chunkSize]; 
    using (Stream input = File.OpenRead(inputFile)) 
    { 
     int index = 0; 
     while (input.Position < input.Length) 
     { 
      using (Stream output = File.Create(outputPrefix + index)) 
      { 
       int chunkBytesRead = 0; 
       while (chunkBytesRead < chunkSize) 
       { 
        int bytesRead = input.Read(buffer, 
               chunkBytesRead, 
               chunkSize - chunkBytesRead); 
        // End of input 
        if (bytesRead == 0) 
        { 
         break; 
        } 
        chunkBytesRead += bytesRead; 
       } 
       output.Write(buffer, 0, chunkBytesRead); 
      } 
      index++; 
     } 
    } 
} 
+0

Vous avez index manqué ++ après output.Write(), donc output.Write n'écrira pas dans le même fichier (index = 0). – Marius

+0

Fixation, merci :) –

2

Votre longueur de tampon de lecture d'octets. Ne devriez-vous pas définir le décalage comme ça alors?

offset += bufferlength; 
1

Ne pas ouvrir votre fichier source dans la boucle, ou vous lirons toujours le premier morceau.

Ouvrez-le avant la boucle, puis assurez-vous que votre décalage est appliqué à la lecture.

Questions connexes