Skocz do zawartości

Nadpisywanie plików binarnych


m97

Rekomendowane odpowiedzi

Witam, szukałem czegoś na temat nadpisywania plików binarnych w dokumentacji, ale nie znalazłem. Mój problem polega na tym, że nie mogę zmienić pojedynczego bajtu w pliku. Przepisywanie pliku na nowo nie wchodzi w grę bo jest to duży plik. Kiedy próbuję nadpisać bajt i ustawiam na niego pozycję pisania w pliku to tworzy mi się nowy bajt obok tego, który chciałem zmienić.

Odnośnik do komentarza
Udostępnij na innych stronach

Zapomniałem dodać że do plików używam specjalnego dll. Podaję dostępne w nim tryby odczytu pliku:

f_bin_open(filename,mode) - Opens a file in binary mode. Filename is the file name (absolute or relative). Mode should be:

1 = tf_mode_read: Opens for reading. Returns an error if the file does not exist.

2 = tf_mode_write: Opens for writing and clears the existing file. Creates the file if it does not exist.

3 = tf_mode_append: Opens for writing and sets the position to the end of the file. Creates the file if it does not exist.

Returns a file id (1-16) or 0 if the file could not be opened, or -1 if an error occurred (invalid mode or more than 16 files opened).

 

Oto mój kod:

GML
if(liczba_modyfikowanych_obiektow > 0){

f_bin_close(id_mapa_plik);

id_mapa_plik_zapis = f_bin_open("domyslny_swiat/mapa.dat",3);

for(a = 0;a < liczba_modyfikowanych_obiektow;a+= 1){

miejsce_zapisu = modyfikowane_obiekty[a,0]*125+modyfikowane_obiekty[a,1];

f_bin_seek(id_mapa_plik_zapis,miejsce_zapisu)

b = ds_grid_get(id_mapy_obiektow,modyfikowane_obiekty[a,0],modyfikowane_obiekty[a,1]);

f_bin_write_byte(id_mapa_plik_zapis,b)

}

f_bin_close(id_mapa_plik_zapis);

id_mapa_plik = f_bin_open("domyslny_swiat/mapa.dat",1);

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jak używasz DLL, to pewnie jest tam jakaś funkcja - tylko nie wiem jaka, bo nie wiem co to za DLL i jakie ma funkcje

 

edit: bo append to "dopisz", czyli dopisuje bajty na końcu, normalne

Odnośnik do komentarza
Udostępnij na innych stronach

Oto wszystkie funkcje dla plików binarnych:

 

 

All functions for reading/writing multi-byte integers use the big-endian format, which means the bytes that represent the biggest values are saved first. For example, 276 will be saved as 0-1-20.

 

f_bin_open(filename,mode) - Opens a file in binary mode. Filename is the file name (absolute or relative). Mode should be:

1 = tf_mode_read: Opens for reading. Returns an error if the file does not exist.

2 = tf_mode_write: Opens for writing and clears the existing file. Creates the file if it does not exist.

3 = tf_mode_append: Opens for writing and sets the position to the end of the file. Creates the file if it does not exist.

Returns a file id (1-16) or 0 if the file could not be opened, or -1 if an error occurred (invalid mode or more than 16 files opened).

 

f_bin_read_byte(fileid) - Reads a byte from the file. Returns the value of the byte, or 0 if the end of the file was reached. Returns 0 if an error occurred (invalid file id).

 

f_bin_read_byte2(fileid) - Reads 2 bytes from the file. Returns the value of the bytes, or 0 if the end of the file was reached. Returns 0 if an error occurred (invalid file id).

 

f_bin_read_byte3(fileid) - Reads 3 bytes from the file. Returns the value of the bytes, or 0 if the end of the file was reached. Returns 0 if an error occurred (invalid file id).

 

f_bin_write_byte(fileid,number) - Writes a byte to the file. Number can be 0-255. Returns 1, or -1 if an error occurred (invalid file id).

 

f_bin_write_byte2(fileid,number) - Writes 2 bytes to the file. Number can be 0-65535. Returns 1, or -1 if an error occurred (invalid file id).

 

f_bin_write_byte3(fileid,number) - Writes 3 bytes to the file. Number can be 0-16777215. Returns 1, or -1 if an error occurred (invalid file id).

 

f_bin_read_chars(fileid,length) - Reads length bytes from the file and returns them as a string. All NULL bytes in the string will be removed. Returns an empty string if an error occurred (invalid file id).

 

f_bin_write_chars(fileid,length,string) - Writes length bytes from the string to the file. If the string is shorter than length the remaining bytes will be filled with NULL bytes. If the string is longer it wil be truncated. Returns 1, or -1 if an error occurred (invalid file id).

 

f_bin_eof(fileid) - Returns whether the last reading function failed because it reached the end of the file. Normally your game should not depend on this function, but use it only for error checking. Returns -1 if an error occurred (invalid file id).

 

f_bin_seek(fileid,pos) - Sets the current reading/writing position of the file. f_bin_memoryerror(fileid) - Returns whether reading failed because of a memory error since the last call of this function. This will only happen if there was not enough free memory. Returns -1 if an error occurred (invalid file id).

 

f_bin_close(fileid) - Closes the file with id fileid. Returns whether successful (almost always), or -1 if an error occurred (invalid file id). If the function fails, the file will still be closed but it might be corrupted.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...