Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C#] Kłopot z odczytem pliku binarnego

Kamil 1 19 Wrz 2012 20:40 1926 4
  • #1 19 Wrz 2012 20:40
    Kamil 1
    Poziom 16  

    Witam.

    Mam problem z odczytem pliku binarnego w C#. Mianowicie chodzi o to, że mam plik binarny z kilkoma bajtami informacji. I chcę odczytać kilka bajtów tylko że nie od samego początku ale np. od 5 bajtu, czyli pierwsze 4 pominąć a dopiero od 5 do X odczytać.

    Umiem odczytać od samego początku w taki sposób:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    i to mi odczytuje pierwsze 10 bajtów. Ale ja chcę teraz np od 4 bajtu odczytać i coś takiego nie działa:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Proszę o pomoc.

    P.S. tu nie chodzi o odczyt liczb czy tekstu tylko zwykłych bajtów.

    0 4
  • #2 19 Wrz 2012 21:10
    gaskoin
    Poziom 38  

    Co znaczy "nie działa" ? Komputer się wyłącza, leci jakiś wyjątek, komputer się pali czy co się dzieje ?

    Zapewne masz 10 bajtów w pliku ?

    0
  • #3 19 Wrz 2012 22:28
    Kamil 1
    Poziom 16  

    Przepraszam że tak mało informacji podałem jakie są dokładnie objawy ale pisałem na szybko. A więc tak. W pliku mam 20 bajtów - na potrzeby testów. Zapisałem tam stringa o takiej treści "1234567890ABCDEFGHIJ", i w pliku jest 20 bajtów a dokładnie to 21:P Każdy znak jak wiadomo to jeden bajt. I teraz tak, coś takiego:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    powoduje że moja tablica "bufor" wygląda tak:

    Code:
    [49,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


    gdzie 49 w ASCII oznacza "1", 50 to "2", a reszty nie ma czyli zera, logiczne.

    A teraz taki zapis:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    powoduje tylko tyle że tablica wgląda tak:

    Code:
    [0,0,0,0,0,49,50,0,0,0,0,0,0,0,0,0,0,0,0,0]


    czyli tu po prostu zapis w buforze zaczyna się od 4 komórki tego bufora. A ja potrzebuję do bufora przepisać bajty z pliku ale chcę mieć możliwość określenia od którego miejsca w tym pliku bajty mają zostać przepisane.

    Myślałem że ten zabieg

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    spowoduje że moja tablica "bufor" będzie wyglądała tak:


    Code:
    [53,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


    gdzie 53 => 5 (ASCII), 54 => 6 (ASCII).

    A więc czy można jakoś odczytywać plik binarny od wybranego momentu? Tzn od wybranego bajtu, czyli np. chcę odczytać 5 bajtów zaczynając od bajtu 12 a to o jest wcześniej to mnie nie interesuje.

    0
  • Pomocny post
    #4 19 Wrz 2012 22:43
    marcinj12
    Poziom 40  

    Dokumentacja funkcji Read nie pozostawia wątpliwości co do znaczenia offsetu:

    Cytat:
    Offset: The byte offset in array at which the read bytes will be placed.
    Czyli: offset (przesunięcie) w bajtach w tablicy, w której będą umieszczane odczytywane bajty.

    Jeżeli chcesz osiągnąć taki efekt jak piszesz, to musisz przesunąć pozycję "kursora" w strumieniu przed odczytaniem do bufora. Czyli coś w stylu:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    Przesuwasz "kursor" o 4 bajty od początku strumienia, a potem odczytujesz dwa kolejne (offset znowu masz 0).

    0
  • Pomocny post
    #5 19 Wrz 2012 23:22
    gaskoin
    Poziom 38  

    marcinj12 napisał:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    Przesuwasz "kursor" o 4 bajty od początku strumienia, a potem odczytujesz dwa kolejne (offset znowu masz 0).


    Można też bardziej intuicyjnie:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0