Zapis / odczyt liczb w pliku binarnym

0

Witam,

Program na pewnym etapie działania ma zapisać listę liczb do pliku binarnego a później ją odczytać. Kod wygląda następująco:

a) zapis:

 
FileInfo f = new FileInfo(filePath + "\\bin\\instancja.bin");
BinaryWriter fbw = new BinaryWriter(f.OpenWrite());

for (int i = 0; i < this.instancja.Count(); i++)
{
    int val = Int32.Parse(this.instancja[i].ToString());
    fbw.Write(val);
}
fbw.Close();

b) Odczyt:


FileInfo r = new FileInfo(this.work_path + "\\instancje\\Bin\\instancja.bin");
BinaryReader bread = new BinaryReader(r.OpenRead());

int pos = 0;
int length = (int)bread.BaseStream.Length;

while (pos < length)
{
    int val = bread.ReadInt32();
    this.odcinki.Add(val);
    pos += sizeof(int);
}

 

Niestety w wyniku takiego działania nie dostaję tych samych liczb. Ktoś ma może pomysł dlaczego?

Z góry dzięki za pomoc!

Pozdrawiam,
Mateusz

0

Czy wszystkie liczby są różne? Tzn. żadna z liczb się nie zgadza?

Myślałeś nad użyciem serializacji? Możesz zapisać całą tablicę na raz i tak samo jedną instrukcją wczytać.

Na marginesie:

Int32.Parse(this.instancja[i].ToString());

Wydaje mi się to nadmiarowe. Lepiej użyć Convert.ToInt32()

0

To zamieszanie z typami to jedynie owoc kombinacji, próbowałem różnych rzeczy, nawet tych potencjalnie głupich. ;)

O dziwo nagle zaczęło działać. Pojawił się jednak dość dziwny problem dot. zachowania. Otóż po krótce: program ma wygenerować multizbiór liczb całkowitych dodatnich i zapisać go do pliku binarnego, aby później druga część programu (algorytm) go wczytała i na nim pracowała. Okazuje się, że teraz część dot. algorytmu wczytuje poprawnie liczby, ale z poprzedniej generacji a nie najnowszej. Domyślam się, że może to być związane z wersją pliku binarnego?

Po zmianie nazwy pliku:
Po pierwszym generowaniu instancji algorytm widzi plik jako pusty. Po drugim generowaniu wczytuje liczby z pierwszego procesu generowania. Pliki są zamykane zaraz po zapisie / odczycie za pętlami.

0

Po pierwsze upewnij się, że na 100% odczyt następuje po zapisie, a nie na odwrót. Jest to najprostsze wyjaśnienie problemu. Inne to, że najnowsza wersja pliku nie jest zapisana i oczekuje w buforze, ale jako że Close() powoduje opróżnienie bufora, więc to raczej nie to.

1 użytkowników online, w tym zalogowanych: 0, gości: 1