logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Borland C++ Builder 6 – błąd undefined symbol 'open' przy odczycie pliku ifstream

Sajter 26 Lip 2010 15:09 2379 10
REKLAMA
  • #1 8331662
    Sajter
    Poziom 10  
    Posty: 51
    Ocena: 3
    mam problem z odczytaniem z pliku mianowicie wyskakuje mi błąd
    undefined symbol 'open'

    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
       ifstream infile;
       infile.open ("dane.txt");
       char dane[1000];
       open.read(sizeof(dane));
       open>>Memo1;
       open.close();
    
    
    }
    //---------------------------------------------------------------------------

    Wiecie jak to rozwiązać??
  • REKLAMA
  • #3 8331809
    lukagrom
    Poziom 16  
    Posty: 195
    Pomógł: 29
    Ocena: 12
    "read" ma dwa argumenty, poza tym u Ciebie zmienną do działania na pliku jest "infile" a nie "open" .
    Tutaj jest to ładnie przestawione:
    Link
    Oczywiście wymagana biblioteka - fstream.h
  • REKLAMA
  • #4 8335739
    Sajter
    Poziom 10  
    Posty: 51
    Ocena: 3
    McMonster napisał:
    Dopisz na górze pliku, zaraz pod podobnymi, taką linię:

    #include <fstream>


    To jest biblioteka, w której znajduje się open().

    nie jestem tempakiem i to jest . Jeżeli nie miałbym tego to by wszystko sie posypało a nie mam problem z odczytaniem tylko z tym Open...

    Cytat:
    "read" ma dwa argumenty, poza tym u Ciebie zmienną do działania na pliku jest "infile" a nie "open" .
    Tutaj jest to ładnie przestawione:

    Czyli jak ma to wyglądać?? Bo chce by program odczytał z pliku i przepisał wszystko do memo1 . Nie wiem czy dobrze poza tym to robie .
  • #5 8335746
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 225
    Sajter napisał:
    nie jestem tempakiem i to jest . Jeżeli nie miałbym tego to by wszystko sie posypało a nie mam problem z odczytaniem tylko z tym Open...

    to moment - nie masz problemu z odczytem, tylko z open? nie rozumiem... i w której linijce ten bład?
  • REKLAMA
  • #6 8335788
    McMonster
    Poziom 32  
    Posty: 1942
    Pomógł: 182
    Ocena: 57
    Nie stwierdziłem, że jesteś tempakiem i nie miałem w ogóle takiego zamiaru. Nie przyjrzałem się całej treści funkcji i nie założyłem, że to właśnie ten podstawowy błąd, ale się myliłem.

    Kolega lukagrom już to wyjaśnił, chodziło mu o to, że deklarujesz zmienną infile i za jej pomocą otwierasz plik, ale dalej odwołujesz się do open, które jest funkcją do otwierania pliku i nie ma nic wspólnego z już otwarty plikiem, a powinieneś do infile.

    Dodatkowo funkcja read przyjmuje dwa argumenty, pierwszy to gdzie zapisać odczytane dane, a drugi, to ile odczytać, czyli powinno być przykładowo:

       ifstream infile;
       int rozmiar = 1000; //dla uproszczenia zmienna z rozmiarem wczytywanych danych
       infile.open ("dane.txt");
       char *dane = new char[rozmiar]; //wskaźnik do łańcucha znaków zamiast statycznej tablicy
       infile.read(dane, rozmiar); //"infile" zamiast "open" oraz wskaźnik do łańcucha znaków i ustalona liczba znaków do odczytania
       infile.close(); //zamykać plik powinno się jak najszybciej
       dane>>Memo1;
    


    Co zresztą możesz zobaczyć w podanym wcześniej linku, gdzie jest przykład użycia read().
  • REKLAMA
  • #7 8336180
    Sajter
    Poziom 10  
    Posty: 51
    Ocena: 3
    Dżyszla napisał:
    Sajter napisał:
    nie jestem tempakiem i to jest . Jeżeli nie miałbym tego to by wszystko sie posypało a nie mam problem z odczytaniem tylko z tym Open...

    to moment - nie masz problemu z odczytem, tylko z open? nie rozumiem... i w której linijce ten bład?

    Przeczytaj w pierwsze code w moim poscie a sie kapmiesz o co chodzi;P
    Cytat:
    ifstream infile;
    int rozmiar = 1000; //dla uproszczenia zmienna z rozmiarem wczytywanych danych
    infile.open ("dane.txt");
    char *dane = new char[rozmiar]; //wskaźnik do łańcucha znaków zamiast statycznej tablicy
    infile.read(dane, rozmiar); //"infile" zamiast "open" oraz wskaźnik do łańcucha znaków i ustalona liczba znaków do odczytania
    infile.close(); //zamykać plik powinno się jak najszybciej
    dane>>Memo1;

    Rozumiem ze pod to mam podstawić swoje zmienne??
    Dasz kod jaki powinienem wpisać żeby wkońcu to zadziałało??
  • Pomocny post
    #8 8337653
    Thorr
    Poziom 11  
    Posty: 8
    Pomógł: 2
    Sajter napisał:

    Czyli jak ma to wyglądać?? Bo chce by program odczytał z pliku i przepisał wszystko do memo1 . Nie wiem czy dobrze poza tym to robie .

    słowo kluczowe wszystko
    nie wiem po co się bawić w fstream skoro i tak chcesz przepisać wszystko
    
    Memo1->Lines->LoadFromFile("dysk:\\katalog\\plik");
    

    bądź jeśli plik jest w tym samym katalogu
    
    Memo1->Lines->LoadFromFile("plik");
    


    a jeśli tak strasznie chcesz sie bawić z fstream to proponuje wykorzystać
    
      
       {
       ifstream infile("dysk:\\katalog\\plik");
       
       if (!infile) return;//przerwanie w przypadku braku obiektu 
       //odczyt liniih aż do konca  czyli infile.eof()
       while (!infile.eof())
       {
          infile.getline(buff, sizeof(buff));
       }
       //zamykanie pliku
       infile.close();
    }
    


    pozdrawiam
    Thorr
  • #9 8341986
    Sajter
    Poziom 10  
    Posty: 51
    Ocena: 3
    Dzieki thorr a jest cos podobnego z zapisem??
    Bo znów się bawić z fstreamem nie chce
  • Pomocny post
    #10 8342280
    Thorr
    Poziom 11  
    Posty: 8
    Pomógł: 2
    jak zrobisz Memo1->Lines-> i analogicznie myśląc wpisujesz SaveToFile
    a najprościej w takich przypadkach użyć
    google.pl -> "c++ builder memo zapisywanie do pliku"

    pozdrawiam
    Thorr
  • #11 8343294
    Sajter
    Poziom 10  
    Posty: 51
    Ocena: 3
    google.pl -> "c++ builder memo zapisywanie do pliku" no wlasnie szukałem i dupa ... Jedynei co znalazłem to niepotrzebne głupoty . Dobra dzięki temat do zamknięcia!

Podsumowanie tematu

✨ Użytkownik zgłosił problem z funkcją `open()` w Borland C++ Builder 6, otrzymując błąd "undefined symbol 'open'". W odpowiedziach zasugerowano dodanie biblioteki `#include ` oraz poprawienie kodu, aby używać zmiennej `infile` zamiast `open`. Wskazano, że funkcja `read` wymaga dwóch argumentów: wskaźnika do bufora oraz liczby odczytywanych bajtów. Alternatywnie, zaproponowano użycie metody `LoadFromFile` dla komponentu `Memo1`, co uprościłoby proces odczytu pliku. Użytkownik pytał również o zapis do pliku, na co zasugerowano użycie `SaveToFile` dla `Memo1`.
Wygenerowane przez model językowy.
REKLAMA