Otvorenie súboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Otvorenie súboru – C / C++ – Fórum – Programujte.comOtvorenie súboru – C / C++ – Fórum – Programujte.com

 

tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #1
-
0
-

zdravým. celé dva dni hladám riešenie pre tento problém.
otváram súbor pre zápis v binárnej podobe. pokial napíšem

fsave = fopen("nazov suboru", "wb");


tak funguje. lae akonahle chcem spraviť

export double mask_save(double id,char fname)

{
FILE *fsave;
MASK * ukMask = zoznam_mask[(int)id];
int h = ukMask->get_height();
long buff_size=h+4;
char buffer[buff_size];

fsave = fopen(fname, "wb");
setbuf(fsave,buffer);
if (!fsave) {fclose(fsave); return (-1);}
fwrite(h,2,1,fsave);
....
}

tak mi kompilator devc++ vzhodí hlášku že nemôže zmeniť dátový typ . akože mi je jasne prečo. ale ako to inač spraviť ?
ked som skušal napísať názov priamo fopen("nazov suboru", "wb"); tak mi zase vyhodilo tu hlášku pri fwrite(w,2,1,fsave);

Nahlásit jako SPAM
IP: 84.47.86.–
KIIV
~ Moderátor
+43
God of flame
1. 7. 2009   #2
-
0
-

dej celou hlasku... obvykle je u ni aspon radek, kde to hlasi..

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #3
-
0
-

C:\Users\Phenom\Desktop\paintball\paintball2\dll test)\dllmain.cpp In function `double mask_save(double, char)':
9 C:\Users\Phenom\Desktop\paintball\paintball2\dll test)\dllmain.cpp invalid conversion from `const char' to `const char*'
9 C:\Users\Phenom\Desktop\paintball\paintball2\dll test)\dllmain.cpp initializing argument 1 of `FILE* fopen(const char*, const char*)'

sak som pisal že pri fopen . ale ak to ma pomôcť o vyriešeniu :-)

Nahlásit jako SPAM
IP: 84.47.86.–
joudicek0
Návštěvník
1. 7. 2009   #4
-
0
-

To tito100 : Tipuju to proto, ze parametr char fname by mel byt spis char * fname nebo char fname[]


A pokud jde o fwrite, tak si nejsem uplne jistej jestli ji mas dobre....

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

<cstdio>

Write block of data to stream

Writes an array of count elements, each one with a size of size bytes, from the block of memory pointed by ptr to the current position in the stream.
The postion indicator of the stream is advanced by the total number of bytes written.
The total amount of bytes written is (size * count).

Parameters

ptr
Pointer to the array of elements to be written.
size
Size in bytes of each element to be written.
count
Number of elements, each one with a size of size bytes.
stream
Pointer to a FILE object that specifies an output stream.







fwrite(h,2,1,fsave) // tady ptredpokladam, ze chces ulozit jeden integer h do souboru

fwrite(&h,4,1,fsave) // pokud je spravne horni komentar, tak bych to udelal asi takhle


prvni parametr je funkce fwrite je ukazatel na buffer, proto mu musis dat ukazatel nebo adresu promenne
druhy je velikost jednoho elementu v bytech -> pro 32 bit platformu je int 4 bytovy
treti parametr je pocet elementu v bufferu
a ctvrty je stream, kam zapisovat

Nahlásit jako SPAM
IP: 212.20.106.–
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #5
-
0
-

super :-) . moc díky. ptresne ako si vravel malo to byť "char fname[]"
a v tom druhom pripade zase ako si pisal "fwrite(&w,4,1,fsave);"
ešte raz dík :-)

Nahlásit jako SPAM
IP: 84.47.86.–
KIIV
~ Moderátor
+43
God of flame
1. 7. 2009   #6
-
0
-

jeste bych doporucil misto 4 dat sizeof(int)

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
joudicek0
Návštěvník
1. 7. 2009   #7
-
0
-

To tito100 : nz
To KIIV : Jo to je dobra pripominka, to jsem nejak opomenul :)

Nahlásit jako SPAM
IP: 212.20.106.–
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #8
-
0
-

naskitol sa mi dalši problem. av tom istom scripte.
DLL sa normalne preloží, ked to spustím tak návratová hodnota je true .ale ked chcem subor nájisť, tak tam nieje. nieje nikde. skušal som zadať nazov aj priamo do fsave = fopen("test", "wb"); a nič. skušal som aj vymazať riadok z buferom. ani tak nič .
komplet funkcia :



export double mask_save(double id,char *fname)
{
MASK * ukMask = zoznam_mask[(int)id];
FILE *fsave;
int &w = 5;//ukMask->get_width();
int &h = ukMask->get_height();
long buff_size=w*h+9;
char buffer[buff_size];

fsave = fopen("test", "wb");
setbuf(fsave,buffer);
if (!fsave) {fclose(fsave); return (-1);}
fwrite(&w,2,1,fsave);
fwrite(&h,2,1,fsave);
for (int i=0;i<w;i++)
{
for (int e=0;e<h;e++)
{
if (ftell(fsave)>buff_size) {fclose(fsave); return (-2);}
int value=ukMask->get_element(w,e);
fwrite(&value,1,1,fsave);
}
}
fflush(fsave);
fclose(fsave);
return (true);
}
vedeli by ste mi poradiť čo teraz ?

Nahlásit jako SPAM
IP: 84.47.86.–
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #9
-
0
-

riadok 20 je char value=ukMask->get_element(w,e);
zabudol som prepisaťa takisto som dal všade sizeof(prislusnyTyp)

Nahlásit jako SPAM
IP: 84.47.86.–
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #10
-
0
-

takže už mi to funguje. ale neviem povedať čo som mal zle :-) . proste som sa v tom rýpal, a zrazu kukám, ono to funguje :-)

Nahlásit jako SPAM
IP: 84.47.86.–
KIIV
~ Moderátor
+43
God of flame
1. 7. 2009   #11
-
0
-

spis mi nejde do hlavy, proc vlastne pouzivas double ..

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #12
-
0
-

preto lebo z hlavneho programu môžem odoslať len 2 typy premennej. a to double a char. takisto aj prevziať
nechcem tu písať že ten hlavný program je gamemaker. tak to tu radčej nenapíšem :smile1:

Nahlásit jako SPAM
IP: 84.47.86.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý