ďťż

Ładny brzuch

Jak w temacie...mam troche smieszny problemik, ale nie bardzo wiem jak sobie z nim poradzic. Jesli chodzi o obluge plikow to zawsze korzystalem ze stand. biblioteki 'stdio.h' a nie korzystalem ze strumieni...teraz jednak zaszla taka koniecznosc i mam pewnien problem... - do rzeczy. Jakie argumenty przy otwieraniu mam przekazac, aby mozna bylo otworzyc plik: jednoczesnie do odczytu i zapisu, ale tak by mozna bylo modyfikowac jego zawartosc (nie tylko zapisywac, ale moc dopisac jakis tekst w srodku pliku), jesli to niemozliwe (jednoczesny odczyt, zapis i modyfikacja - dopisywanie w srodku) to choc prosze o pomoc jak dokonac modyfikacji pliku...bo udalo mi sie cos dopisywac na koncu, albo zmienic cos w srodku (tzn. zastapic jakis tekst innym), a chce dopisac cos w srodku pliku (np. trzeci w wyraz miedzy jakimis dwoma). I to wszystko oczywiscie za pomoca strumieni.



Otwarcie do odczytu i zapisu:
#include <fstream.h> ... fstream File("c:\\plik.txt", ios::in|ios::out);
Dopisać w środku raczej się nie da (dane zostaną nadpisane). Musisz np wczytać plik do jakiejś zmiennej zmodyfikować i z powrotem zapisać.
Użytkownik Konrad_st edytował ten post 30 kwiecień 2006, 20:53

Otwarcie do odczytu i zapisu:
#include <fstream.h> ... fstream File("c:\\plik.txt", ios::in|ios::out);
Dopisać w środku raczej się nie da (dane zostaną nadpisane). Musisz np wczytać plik do jakiejś zmiennej zmodyfikować i z powrotem zapisać.


Nio wlasnie...a mi dokladnie chodzi o to, zeby dopsisywac cos w srodku pliku (np. miedzy dwoma slowami)...moze jednak sie da?




Nie da sie.
Musisz wczytać to co jest, w pamięci wstawić słowo, i zapisać nową postać.


Nio ok, ale jesli w pliku jest bardzo wiele znakow, a ja nie moge sobie pozwolic na wczytania np. 100 pierwszych znakow, pozniej 100 kolejnych itd, poniewaz musze wyszukiwac w pliku okreslone ciagi znakow i je modyfikowac, a co jesli by ten moj szukany ciag znajdowal sie miedzy 98-103 znakiem ? nie odnalazlbym go, gdyz zostalby "rozerwny" Jakis pomysl?

Ale jesli plik jest bardzo spory (zawiera bardzo wiele znakow) to wczytanie go do pamieci RAM do jednej zmiennej (np. owej tablicy char-ow) moze byc niemozliwe, i co w takim przypadku ?

Nie, no co wy piszecie... Da siętak zrobić. Ale są pewne warunki. Na pewno nie możesz rozepchnąć pliku, to znaczy zamiast kot wpisać kotek. Zasadniczo plik powinien mieć strukturę rekordową. Wtedy możesz sobie ustawić wskaźnik w pliku gdzie chcesz i pisać tam co chcesz. Ale jak struktura ma 7 bajtów (przykładowo), to możesz zapisać te 7 bajtów, a nie 6 ani 8.


Nie, no co wy piszecie... Da siętak zrobić. Ale są pewne warunki. Na pewno nie możesz rozepchnąć pliku, to znaczy zamiast kot wpisać kotek. Zasadniczo plik powinien mieć strukturę rekordową. Wtedy możesz sobie ustawić wskaźnik w pliku gdzie chcesz i pisać tam co chcesz. Ale jak struktura ma 7 bajtów (przykładowo), to możesz zapisać te 7 bajtów, a nie 6 ani 8.

No więc rada z zapisaniem pliku do pamięci i nadpisaniem jest tu chyba najlepszym pomysłem w tej sytuacji. Na upartego możnaby od miejsca zmiany do końca pliku przepisywać korzystając z niewielkiego bufora, ale to tylko przy wydłużaniu pliku. Zupełnie nie mam pomysłu jak plik skrócić,żeby to było sensowne. Ostatnio używałem bufora wielkości około 100MB i jakoś to działa. Z brakiem pamięci można sobie radzić plikami tymczasowymi. Tylko czy na pewno warto? Może pochwal się po co chcesz to robić, to będzie łatwiej coś wymyślić sensownego.


(...) Może pochwal się po co chcesz to robić, to będzie łatwiej coś wymyślić sensownego.

Z tego, co wiem, to notatnik wczytuje cały plik do pamięci (przynajmniej tak mi się wydaje jak widzę, jak otwiera bardzo duże pliki). I chyba tak by to należało zrobić, że wczytuje plik do kontrolki tekstowej, która już automagicznie obsługuje wszystkie operacje typu wklejania, a na koniec zapisuje się plik z tej kontrolki i po sprawie. Cóż... no może się wywalić przy dużych plikach, ale spróbuj otworzyć notatnikiem jakiś film, też nie zadziała idealnie... :huh:
Zwłaszcza, że to jeszcze dla kogoś piszesz... to zrób tak, żeby tobie było łatwo, podejdź do tego komercyjnie. A jak napiszesz, to będziesz wiedział kiedy program się wywala, wtedy możesz dać jakieś zabezpieczenia, że plik za duży, czy coś...

Ok. Juz udalo mi sie poradzic z tym problemem w inny, znacznie ciekawszy sposob...ladowanie wszystkiego do pamieci ? - to nie rozwiazanie. Jak znajde chwile to zamieszcze rozwiazanie tego problemu. Wszystkim za proby pomocy serdecznie dziekuje - pozdrawiam.

O, to fajnie by było, jakbyś znalazł chwilę i podzielił się tym rozwiązaniem. Myślę, że dowiem się czegoś nowego o obsłudze plików. Twój post brzmi na tyle tajemniczo, że spodziewam się małej rewolucji w moim sposobie myślenia na ten temat.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •