2017-07-19 5 views
-1

je suis après un peu d'aide à la création d'un tableau d'octets qui permettra à ce qui suit:Créer un tableau d'octets impair

  • octets 1-2: Un nombre entier, n, qui spécifie la longueur du nom du fichier
  • 3 - n + 2: le nom du fichier
  • n + 3 - n + 10: la dernière date modifiée du fichier
  • n + 11 - n + 12: nombre entier ayant la valeur 1
  • n + 13 - n + 16: entier long avec la longueur des données de fichier
  • n + 17 - n + 20: entier long avec valeur 0
  • n + 21 - fin: Le contenu du fichier.

J'ai déjà le code suivant qui place le fichier dans le tableau d'octets, mais c'est sur la dernière partie.

byte[] filebytes; 
st.birth_certificate = detail[4]; 
downloadfile.HTML = detail[4]; 
downloadfile.fileName = downloadfile.GetFileNameFromUrl(st.birth_certificate); 
downloadfile.toLocation = @"c:\temp\" + downloadfile.fileName; 
if (downloadfile.DownloadFile()) 
{ 
    filebytes= File.ReadAllBytes(downloadfile.toLocation); 
    st.birth_certificate_file = filebytes; 
} 

Toute aide serait grandement apprécié.

Répondre

0

Mieux vaut faire avec BinaryReader. Je ne suis pas sûr si les nombres sont des valeurs hexadécimales ou des nombres ascii (ou Big/Little Endian) donc je fais un peu de devinettes. Le code peut nécessiter quelques ajustements mineurs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string URL = "enter you url here"; 
      FileStream sReader = File.OpenRead(URL); 
      BinaryReader reader = new BinaryReader(sReader); 

      int filenameLength = reader.ReadInt16(); 
      string filename = Encoding.UTF8.GetString(reader.ReadBytes(filenameLength)); 
      int year = int.Parse(Encoding.UTF8.GetString(reader.ReadBytes(4))); 
      int month = int.Parse(Encoding.UTF8.GetString(reader.ReadBytes(2))); 
      int day = int.Parse(Encoding.UTF8.GetString(reader.ReadBytes(2))); 
      DateTime date = new DateTime(year, month, day); 
      short number1 = reader.ReadInt16(); 
      int number2 = reader.ReadInt32(); 
      byte[] data = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position + 1)); 

     } 


    } 
} 
+0

OK, j'ai copié votre code exactement comme indiqué car cela ne semble pas fonctionner. J'ai remplacé le "entrez votre URL ici" à c: \\ temp \\ nom_fichier.pdf et une erreur se produit à la ligne de nom de fichier de chaîne. Ai-je raté quelque chose –

+0

Vérifiez la valeur de filenameLength. La longueur est probablement plus grande que la taille du fichier. Je ne sais pas si le nombre réel des octets est en arrière (petit/grand endian) ou la longueur est ASCII. – jdweng