Usuwanie pierwszych X bajtów z pliku

0

Czy istnieje jakiś sposób aby usunąć powiedzmy pierwsze 500 bajtów z pliku bez konieczności jego kopiowania?
Załóżmy że mam plik 4gb i aby nie trzeba było tych 4gb (bez tych 500bajtów) kopiować do nowego pliku chciałbym usunąć pierwsze 500bajtów w nim, tak aby to szybko zadziałało.

A czy by dało się ustawić wewnętrzny wskaźnik pliku na 500 bajt od początku pliku?
Tak aby plik jak będzie otwierany to jakby od tego 500 bajta

Wiecie co mam na myśli?

Wiecie co mam na myśli?

To co napisałem o tym wewnętrznym ustawieniu wskaźnika chyba jest do kitu bo to dotyczy tylko wskaźnika używanego przez ten program, albo teraz jestem w błędzie

0

Nie ma czego takiego jak wewnętrzny wskaźnik pliku. Możesz zapamiętać w programie, że ten-i-ten plik czytać od 500 bajta lub 814 bajta.
Jeżeli chodzi o usunięcie pierwszych 500 bajtów, to chyba nic z tego. Zapewne ma to związek z tym, że namieszałbyś w systemie plików :P

0

To w jaki sposób można zrobić aby ni trzeba było kopiować całego 4gb?
Nie można jakoś zrobić aby plik po prostu wcześniej się później się zaczynał czy coś?

0

A co ty chcesz uzyskać?

0

Nie da się bez grzebania w systemie plików, czego absolutnie nie powinno się robić. Jeśli obawiasz się o przestrzeń dyskową wymaganą do przeprowadzenia operacji, to przycięcie można zrobić bez tworzenia nowego pliku, aczkolwiek jest to dość niebezpieczne (ryzykujesz zniszczenie danych). I tak jednak trzeba przerzucać bajty z miejsca A w miejsce B, więc czas trwania operacji będzie dość długi (dłuższy niż przy zapisie do nowego pliku).

0

To jedynym sposobem jest kopiowanie tych 4gb?
To przecież będzie długo trwało.
Byś mógł więcej powiedzieć o

grzebania w systemie plików
co masz na myśli?
Program będzie dotyczył jednego stałego pliku wiec nie będzei trzeba pisać jakiegoś algorytmu tylko oprogramować jeden plik.
Dzięki za wszelkie info

0

Nie rozumiesz jak działają pliki... NIE DA SIĘ kasować lub dopisywać w środku pliku, można co najwyżej nadpisywać. Jak chcesz usunąć z początku te 500 bajtów to MUSISZ całą resztę przesunąć o te 500 bajtów w stronę początku pliku.

0
tehu napisał(a)

To jedynym sposobem jest kopiowanie tych 4gb?

Tak.

tehu napisał(a)

To przecież będzie długo trwało.

Tak, to jest dość istotny problem, który boli wszystkich. W ostatnim dziesięcioleciu ilość przechowywanych danych rozrosła się niebotycznie, a prędkość odczytu/zapisu dysków twardych rosła bardzo powoli. SSD nieco poprawił sytuację, ale to wciąż zbyt mało, zbyt późno, zbyt awaryjnie. Jeśli pracujesz na dużych plikach (obrazy nośników o dużych pojemnościach, nieskompresowane pliki wideo itp.) to musisz się pogodzić z tym, że operacje na nich będą trwały długo. Przynajmniej do czasu, aż nie powstaną szybsze dyski twarde (pamięć biologiczna zapowiada się ciekawie), lub nie powstanie specjalny system plików, który będzie umożliwiał takie zabawy jak chcesz.

tehu napisał(a)

Byś mógł więcej powiedzieć o

grzebania w systemie plików
co masz na myśli?

Którego wyrazu z "czego absolutnie nie powinno się robić" nie rozumiesz?

tehu napisał(a)

Program będzie dotyczył jednego stałego pliku wiec nie będzei trzeba pisać jakiegoś algorytmu tylko oprogramować jeden plik.

Nie wiesz co to znaczy "algorytm". Nie ma znaczenia czy problem dotyczy jednego, czy kilku plików.

Jeśli masz możliwość zmiany obsługi tego dużego pliku, zastanów się czy nie lepiej przechowywać dane w postaci kilkudziesięciu mniejszych plików. Wszelkie przycinanie od przodu, od tyłu czy w środku będą wtedy trwały krócej. Program korzystający z tych danych może sobie je sklejać jeśli jest to możliwe (np. po dotarciu do końca jednego pliku otwiera kolejny i kontynuuje odczyt/zapis). Przeszukiwanie będzie upierdliwe, ale jeśli takie przycinki będziesz robił często, być może warto poświęcić prostotę i szybkość działania programu korzystającego z tych danych na rzecz zwiększenia prędkości operacji przycięcia. To już musisz przeanalizować sam.

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