eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingOperacje na plikach (odczyt i zapis fread i fwrite)
Ilość wypowiedzi w tym wątku: 9

  • 1. Data: 2010-04-13 14:12:30
    Temat: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: "Marcin M." <m...@g...com>

    Witam!
    Bardzo bym prosił o pomoc. Dlaczego to nie działa choć się kompiluje?
    Nie jestem zbyt dobrym programistom, potrzebny mi po prostu program do
    szkoły. Radzę sobie z odczytywaniem plików ale nie mogę dopisywać do
    pliku żadnych danych ani nic w nim zmieniać. Nie mogę nawet po prostu
    przekopiować zawartości tego pliku:




    int przepisz (char *path1, char *path2)
    {
    FILE* zrodlo;
    FILE* target;

    zrodlo = fopen(path1,"rb");
    target = fopen(path2,"wb");
    rewind(zrodlo);
    fseek(zrodlo,0,SEEK_END);
    size_t p1size=ftell(zrodlo);

    rewind(target);
    rewind(zrodlo);
    char* bufer;
    bufer=0;
    fread(bufer,p1size,1,zrodlo);
    fwrite(bufer,p1size,1,target);
    fclose(zrodlo);
    fclose(target);
    return 0;
    }



    void main(void)
    {
    //przepisz("obraz3.bmp","przepisany.bmp");
    }


  • 2. Data: 2010-04-13 14:28:19
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: Jacek Czerwinski <...@...z.pl>

    Marcin M. pisze:
    > Witam!
    > Bardzo bym prosił o pomoc. Dlaczego to nie działa choć się kompiluje?

    Porobisz trochę w C, zobaczysz że kompilacja nie znaczy niemal nic.

    Ze słowem 'nie działa' to masz małe szanse dostać pomoc. Podawaj objawy,
    komunikaty, te sprawy. Wybacz, ale 'nie działa' to każda blondynka napisze.

    > Nie jestem zbyt dobrym programistom,
    polonistą też. Wybacz, sam się podkładasz.

    > potrzebny mi po prostu program do
    > szkoły. Radzę sobie z odczytywaniem plików ale nie mogę dopisywać do
    > pliku żadnych danych ani nic w nim zmieniać. Nie mogę nawet po prostu
    > przekopiować zawartości tego pliku:

    Po pierwsze wyniki działania funkcji np. fopen trzeba sprawdzać, jak nie
    gra, to sprawdzac dlaczego (errno, perror)

    Po drugie czytasz pod nieistniejący (niezainicjowany prawidłowo - skąd
    to rżnąłeś?) bufer.


  • 3. Data: 2010-04-13 14:35:51
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: Mariusz Kruk <M...@e...eu.org>

    epsilon$ while read LINE; do echo \>"$LINE"; done < "Marcin M."
    > fseek(zrodlo,0,SEEK_END);
    > size_t p1size=ftell(zrodlo);

    > fread(bufer,p1size,1,zrodlo);

    A poza rzeczami, które już ci koledzy napisali, jesteś bardzo odważny
    usiłując wczytać cały plik na raz.

    --
    \------------------------/
    | K...@e...eu.org |
    | http://epsilon.eu.org/ |
    /------------------------\


  • 4. Data: 2010-04-13 14:39:50
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: Marcin Kwiatkowski <f...@l...bielsko.pl>

    On 2010-04-13, Marcin M. <m...@g...com> wrote:
    > Witam!
    > Bardzo bym prosił o pomoc. Dlaczego to nie działa choć się kompiluje?
    > Nie jestem zbyt dobrym programistom, potrzebny mi po prostu program do
    > szkoły. Radzę sobie z odczytywaniem plików ale nie mogę dopisywać do
    > pliku żadnych danych ani nic w nim zmieniać. Nie mogę nawet po prostu
    > przekopiować zawartości tego pliku:
    >
    >
    >
    >
    > int przepisz (char *path1, char *path2)
    > {
    > FILE* zrodlo;
    > FILE* target;
    >
    > zrodlo = fopen(path1,"rb");
    > target = fopen(path2,"wb");
    > rewind(zrodlo);
    > fseek(zrodlo,0,SEEK_END);
    > size_t p1size=ftell(zrodlo);
    >
    > rewind(target);
    > rewind(zrodlo);
    > char* bufer;
    > bufer=0;
    Niepotrzebne. zamiast tego
    bufer=malloc(p1size);

    > fread(bufer,p1size,1,zrodlo);
    > fwrite(bufer,p1size,1,target);
    > fclose(zrodlo);
    > fclose(target);
    a tu
    free(bufer);
    > return 0;
    > }
    >
    >
    >
    > void main(void)
    > {
    > //przepisz("obraz3.bmp","przepisany.bmp");
    > }


    --
    Pozdrawiam,
    Marcin Kwiatkowski


  • 5. Data: 2010-04-13 14:41:51
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: Marcin Kwiatkowski <f...@l...bielsko.pl>

    On 2010-04-13, Marcin Kwiatkowski <f...@l...bielsko.pl> wrote:
    > On 2010-04-13, Marcin M. <m...@g...com> wrote:
    >> Witam!
    >> Bardzo bym prosił o pomoc. Dlaczego to nie działa choć się kompiluje?
    >> Nie jestem zbyt dobrym programistom, potrzebny mi po prostu program do
    >> szkoły. Radzę sobie z odczytywaniem plików ale nie mogę dopisywać do
    >> pliku żadnych danych ani nic w nim zmieniać. Nie mogę nawet po prostu
    >> przekopiować zawartości tego pliku:
    >>
    >>
    >>
    >>
    >> int przepisz (char *path1, char *path2)
    >> {
    >> FILE* zrodlo;
    >> FILE* target;
    >>
    >> zrodlo = fopen(path1,"rb");
    >> target = fopen(path2,"wb");
    >> rewind(zrodlo);
    >> fseek(zrodlo,0,SEEK_END);
    >> size_t p1size=ftell(zrodlo);
    >>
    >> rewind(target);
    >> rewind(zrodlo);
    >> char* bufer;
    >> bufer=0;
    > Niepotrzebne. zamiast tego
    > bufer=malloc(p1size);
    >
    >> fread(bufer,p1size,1,zrodlo);
    >> fwrite(bufer,p1size,1,target);
    >> fclose(zrodlo);
    >> fclose(target);
    > a tu
    > free(bufer);
    >> return 0;
    >> }
    >>
    >>
    >>
    >> void main(void)
    >> {
    >> //przepisz("obraz3.bmp","przepisany.bmp");
    >> }
    >
    >
    Ach... pospieszylem sie i niewyraznie napisalem :)
    oczywiscie niepotrzebnie zerujesz wskaznik. A przed opuszczeniem funkcji
    musisz zwolnic pamiec.

    --
    Pozdrawiam,
    Marcin Kwiatkowski


  • 6. Data: 2010-04-13 16:06:45
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: "Marcin M." <m...@g...com>

    Dzięki, teraz działa. Niestety kłóci się z resztą programu. (Po
    uruchomieniu dostaję komunikat "Przepraszamy, wystąpił problem z
    aplikacją Bitmapy.exe i zostanie ona zamknięta..." - dlaczego?).
    Wywołując TYLKO funkcje LoadData i LoadImage wszystko chodzi pięknie.
    Co do błędu ortograficznego - zauważyłem go po wrzuceniu posta a nie
    znalazłem opcji edytuj - przepraszam za urażenie Waszych zmysłów
    estetycznych : )
    Wczytuję cały plik bo są to niewielkie pliki (8x8), poza tym staram
    się tylko przetestować operacje na plikach i zrozumieć dobrze jak
    poprawnie używać fread i fwrite.
    Oto reszta:
    #include<iostream>
    #include<fstream>
    #include <Windows.h>

    using namespace std;


    class BMP

    {
    public:
    typedef struct
    {
    WORD bfType;
    DWORD bfSize;
    DWORD bfReserved1;
    DWORD bfReserved2;
    DWORD bfOffBits;
    } bmpFH;

    typedef struct
    {
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
    } bmpIH;

    typedef struct
    {
    int R;
    int G;
    int B;
    int empty;
    } colors;

    bmpFH FileHeader;
    bmpIH InfoHeader;
    colors IMGData;
    unsigned char *Data;

    };



    int x,y;

    char *buff;
    long DSize;
    int *binary;
    FILE* plik;
    FILE* data;



    int LoadImage(char *sciezka)
    {
    BMP BM;
    plik = fopen(sciezka, "rb");
    fread(&BM.FileHeader, sizeof(BMP::bmpFH), 1, plik);
    fread(&BM.InfoHeader, sizeof(BMP::bmpIH), 1, plik);
    if (BM.FileHeader.bfType != 0x4D42)
    {
    printf("UWAGA: To nie jest bitmapa\n");
    fclose(plik);
    return 1;
    }

    fseek(plik, 18, SEEK_SET);
    fread(&x, sizeof(LONG), 1, plik);
    fread(&y, sizeof(LONG), 1, plik);
    cout<<"Rozmiar obrazu (XxY) to: "<<x<<"x"<<y<<endl;
    cout<<"Maksymalny rozmiar przechowywanych informacji: "<<((x-(x
    %4))*y*3)<<" bitow"<<endl;
    }


    int LoadData(char *sciezka)
    {

    data = fopen(sciezka, "rb");
    fseek(data,0,SEEK_END);
    DSize= ftell(data)*8;
    if (DSize>((x-(x%4))*y*3))
    {
    printf("UWAGA: Rozmiar pliku zbyt duzy\n");
    fclose(data);
    return 1;
    }
    cout<<"Aktualny rozmiar pliku z danymi: "<<DSize<<endl;
    fseek(data,0,SEEK_SET);

    char*buff;
    buff=(char*)malloc(sizeof(char)*(DSize/8));
    fread(buff,1,(DSize/8),data);

    binary = new int[DSize];
    int i,j;
    i=0;
    j=0;
    for (i=0; i<=DSize; i=i+8)
    {
    j=0;
    for(unsigned m = 128; m > 0; m >>= 1)
    {
    if(buff[i/8] & m)
    {binary[i+j]=1; }
    else
    {binary[i+j]=0; }
    j++;
    }
    } fclose(data);
    free(buff);
    }


    int przepisz (char *path1, char *path2)
    {
    FILE* zrodlo;
    FILE* target;

    zrodlo = fopen(path1,"rb");
    target = fopen(path2,"wb");
    rewind(zrodlo);
    fseek(zrodlo,0,SEEK_END);
    size_t p1size=ftell(zrodlo);

    rewind(target);
    rewind(zrodlo);
    void*bufer;
    bufer=malloc(p1size);
    fread(bufer,p1size,1,zrodlo);
    fwrite(bufer,p1size,1,target);
    fclose(zrodlo);
    fclose(target);
    free(bufer);
    return 0;

    }

    void main(void)
    {
    LoadImage("obraz3.bmp");
    LoadData("dane.dnn");
    //przepisz("obraz3.bmp","przepisany.bmp");


    }


  • 7. Data: 2010-04-13 16:06:58
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: "Marcin M." <m...@g...com>

    Dzięki, teraz działa. Niestety kłóci się z resztą programu. (Po
    uruchomieniu dostaję komunikat "Przepraszamy, wystąpił problem z
    aplikacją Bitmapy.exe i zostanie ona zamknięta..." - dlaczego?).
    Wywołując TYLKO funkcje LoadData i LoadImage wszystko chodzi pięknie.
    Co do błędu ortograficznego - zauważyłem go po wrzuceniu posta a nie
    znalazłem opcji edytuj - przepraszam za urażenie Waszych zmysłów
    estetycznych : )
    Wczytuję cały plik bo są to niewielkie pliki (8x8), poza tym staram
    się tylko przetestować operacje na plikach i zrozumieć dobrze jak
    poprawnie używać fread i fwrite.
    Oto reszta:
    #include<iostream>
    #include<fstream>
    #include <Windows.h>

    using namespace std;


    class BMP

    {
    public:
    typedef struct
    {
    WORD bfType;
    DWORD bfSize;
    DWORD bfReserved1;
    DWORD bfReserved2;
    DWORD bfOffBits;
    } bmpFH;

    typedef struct
    {
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
    } bmpIH;

    typedef struct
    {
    int R;
    int G;
    int B;
    int empty;
    } colors;

    bmpFH FileHeader;
    bmpIH InfoHeader;
    colors IMGData;
    unsigned char *Data;

    };



    int x,y;

    char *buff;
    long DSize;
    int *binary;
    FILE* plik;
    FILE* data;



    int LoadImage(char *sciezka)
    {
    BMP BM;
    plik = fopen(sciezka, "rb");
    fread(&BM.FileHeader, sizeof(BMP::bmpFH), 1, plik);
    fread(&BM.InfoHeader, sizeof(BMP::bmpIH), 1, plik);
    if (BM.FileHeader.bfType != 0x4D42)
    {
    printf("UWAGA: To nie jest bitmapa\n");
    fclose(plik);
    return 1;
    }

    fseek(plik, 18, SEEK_SET);
    fread(&x, sizeof(LONG), 1, plik);
    fread(&y, sizeof(LONG), 1, plik);
    cout<<"Rozmiar obrazu (XxY) to: "<<x<<"x"<<y<<endl;
    cout<<"Maksymalny rozmiar przechowywanych informacji: "<<((x-(x
    %4))*y*3)<<" bitow"<<endl;
    }


    int LoadData(char *sciezka)
    {

    data = fopen(sciezka, "rb");
    fseek(data,0,SEEK_END);
    DSize= ftell(data)*8;
    if (DSize>((x-(x%4))*y*3))
    {
    printf("UWAGA: Rozmiar pliku zbyt duzy\n");
    fclose(data);
    return 1;
    }
    cout<<"Aktualny rozmiar pliku z danymi: "<<DSize<<endl;
    fseek(data,0,SEEK_SET);

    char*buff;
    buff=(char*)malloc(sizeof(char)*(DSize/8));
    fread(buff,1,(DSize/8),data);

    binary = new int[DSize];
    int i,j;
    i=0;
    j=0;
    for (i=0; i<=DSize; i=i+8)
    {
    j=0;
    for(unsigned m = 128; m > 0; m >>= 1)
    {
    if(buff[i/8] & m)
    {binary[i+j]=1; }
    else
    {binary[i+j]=0; }
    j++;
    }
    } fclose(data);
    free(buff);
    }


    int przepisz (char *path1, char *path2)
    {
    FILE* zrodlo;
    FILE* target;

    zrodlo = fopen(path1,"rb");
    target = fopen(path2,"wb");
    rewind(zrodlo);
    fseek(zrodlo,0,SEEK_END);
    size_t p1size=ftell(zrodlo);

    rewind(target);
    rewind(zrodlo);
    void*bufer;
    bufer=malloc(p1size);
    fread(bufer,p1size,1,zrodlo);
    fwrite(bufer,p1size,1,target);
    fclose(zrodlo);
    fclose(target);
    free(bufer);
    return 0;

    }

    void main(void)
    {
    LoadImage("obraz3.bmp");
    LoadData("dane.dnn");
    //przepisz("obraz3.bmp","przepisany.bmp");


    }


  • 8. Data: 2010-04-13 18:55:11
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: Mariusz Kruk <M...@e...eu.org>

    epsilon$ while read LINE; do echo \>"$LINE"; done < "Marcin M."
    >Dzięki, teraz działa. Niestety kłóci się z resztą programu. (Po
    >uruchomieniu dostaję komunikat "Przepraszamy, wystąpił problem z
    >aplikacją Bitmapy.exe i zostanie ona zamknięta..." - dlaczego?).

    Prawdopodobnie coś spaprałeś gdzie indziej.

    >Wywołując TYLKO funkcje LoadData i LoadImage wszystko chodzi pięknie.

    "Jeśli wywołuję", a nie "wywołując" (idąc do szkoły świeciło słońce).

    >Wczytuję cały plik bo są to niewielkie pliki (8x8), poza tym staram
    >się tylko przetestować operacje na plikach i zrozumieć dobrze jak
    >poprawnie używać fread i fwrite.

    Dobrze byłoby jakbyś zrozumiał dlaczego twoje podejście jest w ogólności
    nienajlepsze (jak jesteś _absolutnie pewien_ warunków, czasami możesz
    przyjąć pewne założenia, ale i tak pewnie kiedyś dostaniesz nimi po
    głowie).

    >Oto reszta:

    Łojeza. Człowieku, zdecyduj się w czym piszesz.
    C++ to _nie_ jest takie "fajniejsze C, bo można używać cout".


    --
    \.\.\.\.\.\.\.\.\.\.\.\.\.\
    .\....@e...eu.org.\.\.
    \.http://epsilon.eu.org/\.\
    .\.\.\.\.\.\.\.\.\.\.\.\.\.


  • 9. Data: 2010-04-13 22:01:12
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: gacek <g...@w...pl>

    Marcin M. wrote:
    > void main(void)
    > {
    > //przepisz("obraz3.bmp","przepisany.bmp");
    > }

    no dobra, ale tego to nikt nie widzi?

    odkomentuj (skasuj //).


    gacek

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: