arpsoft Posted February 1, 2006 Posted February 1, 2006 Ez sem rossz, de ez egy leírása csak az api függvényeknek, amiket használhatsz. Ehhez már meg kell lennie az alapoknak.
horukk Posted February 27, 2006 Posted February 27, 2006 Nem system parancsokkal, hanem file pointerrel szeretnék állományokat másolni. Ez megy is amíg szöveges állományokról van szó. De bináris állományt vajon hogy kell? A fájl megnyitása bináris módban megtörténik. Ahhoz, hogy másolni tudjam, be kéne írni a tartalmát egy tömbbe, ahonnét majd visszaírom fájlba. A tömbbe írás nem mûködik. Kérek segítséget. Kösz.
arpsoft Posted February 28, 2006 Posted February 28, 2006 C-ben Windows alá: BOOL CopyFile(char far* szFileSrc,char far* szFileDest) { HFILE hfileSrc,hfileDest; int cbRead; PBYTE pbBuf; hfileSrc=_lopen(szFileSrc,OF_READ|OF_SHARE_DENY_NONE); if(hfileSrc==HFILE_ERROR) return FALSE; hfileDest=_lcreat(szFileDest,0); if(hfileDest==HFILE_ERROR) { _lclose(hfileSrc); return FALSE; } pbBuf=(PBYTE)GlobalAlloc(GMEM_FIXED,10000); do { cbRead=_lread(hfileSrc,pbBuf,10000); _lwrite(hfileDest,pbBuf,cbRead); } while(cbRead!=0); GlobalFree((HGLOBAL)pbBuf); _lclose(hfileSrc); _lclose(hfileDest); return TRUE; } Szintén C-ben, szintén Windows alá: BOOL CopyFile(char far* szFileSrc,char far* szFileDest) { int iCount=0; char szError[30]; OFSTRUCT ofStrSrc; OFSTRUCT ofStrDest; HFILE hfileSrc=NULL,hfileDest=NULL; while(hfileSrc==NULL && iCount<100) { iCount++; hfileSrc=OpenFile((LPCSTR)szFileSrc,&ofStrSrc,OF_READ|OF_SHARE_COMPAT); } if(hfileSrc==HFILE_ERROR) { wsprintf(szError,"Olvasási hiba (0x%04lx)",(long int)ofStrSrc.nErrCode); MessageBox(NULL,szFileSrc,szError,MB_OK); return FALSE; } iCount=0; while(hfileDest==NULL && iCount<100) { hfileDest=OpenFile((LPCSTR)szFileDest,&ofStrDest,OF_CREATE); iCount++; } if(hfileDest==HFILE_ERROR) { _lclose(hfileSrc); wsprintf(szError,"Létrehozási hiba (0x04%lx)",(long int)ofStrDest.nErrCode); MessageBox(NULL,szFileDest,szError,MB_OK); return FALSE; } switch(CopyLZFile(hfileSrc,hfileDest)) { case LZERROR_BADINHANDLE:MessageBox(NULL,"Rossz forrásfájl!","Másolás",MB_OK);break; case LZERROR_BADOUTHANDLE:MessageBox(NULL,"Rossz kimenõ fájl!","Másolás",MB_OK);break; case LZERROR_BADVALUE:MessageBox(NULL,"Rossz érték!","Másolás",MB_OK);break; case LZERROR_GLOBALLOC:MessageBox(NULL,"Memóriafoglalási hiba!","Másolás",MB_OK);break; case LZERROR_GLOBLOCK:MessageBox(NULL,"Memóriafelszabadítási hiba!","Másolás",MB_OK);break; case LZERROR_READ:MessageBox(NULL,"Olvasási hiba!","Másolás",MB_OK);break; case LZERROR_UNKNOWNALG:MessageBox(NULL,"Ismeretlen formátum!","Másolás",MB_OK);break; case LZERROR_WRITE:MessageBox(NULL,"Nem lehet írni!","Másolás",MB_OK);break; } _lclose(hfileSrc); _lclose(hfileDest); return TRUE; }
horukk Posted February 28, 2006 Posted February 28, 2006 Kösz arpsoft. De engem igazából egy DOS-os megoldás érdekelt volna. Ilyesmi, mint az alábbi, csak bináris állománnyal: int masol(){ FILE *fp; char tomb[100], c; int r=0, w=0; if((fp=fopen("input.txt","rt"))==NULL){ //Fájl megnyitása olvasásra. printf("\n\n Az input.txt allomany nem letezik. Elobb hozza letre!");//Ha nem lehet megnyitni, hibauzenet. }else{ while(c!=EOF){ //Fájl tartalmának beolvasása tömbbe fájlvégig. c=fgetc(fp); tomb[r]=c; r++; } fclose(fp); //Fájl lezárása. //printf("\n%c, r= %d",tomb[0],r); //Elenõrzés. fp=fopen("output.txt","wt"); //Fájl megnyitása írásra. while(w<r-1){ fputc(tomb[w],fp); //Tömb tartalmának kiíratása fájlba. w++; } fclose(fp); //Fájl lezárása. printf("\n\n *** A masolas befejezodott. ***"); } return 0; }
arpsoft Posted February 28, 2006 Posted February 28, 2006 int masol(){ FILE *fp; int *tomb=(int*)NULL; long int r=0; if((fp=fopen("input.txt","rb"))==NULL){ //Fájl megnyitása olvasásra. printf("\n\n Az input.txt allomany nem letezik. Elobb hozza letre!");//Ha nem lehet megnyitni, hibauzenet. }else{ fseek(fp,0,SEEK_END); r=ftell(fp); tomb=(int*)malloc(r+1); fseek(fp,0,SEEK_SET); fread(tomb,r,1,fp); fclose(fp); } if(fp=fopen("output.txt","w")==NULL){ //Fájl megnyitása írásra. printf("\n\n Az output.txt állományt nem lehet létrehozni!"); }else{ fseek(fp,0,SEEK_SET); fwrite(tomb,r,1,fp); fclose(fp); } printf("\n\n *** A masolas befejezodott. ***"); if(tomb!=(int*)NULL) free(tomb); return 0; }
csutomi Posted February 28, 2006 Author Posted February 28, 2006 A lényeg, hogy mikor megnyitod a fájlt, akkor nem "rt", hanem "rb" (olvasásnál). írásnál pedig "wt" a szöveges, "wb" a bináris.
horukk Posted March 1, 2006 Posted March 1, 2006 Kösz, erre gondoltam. Amikor deklarálom a *tomb mutatót, adok neki NULL értéket. De miért kell elé az (int*) tipusmódosító? Hiszen már int-nek van deklarálva a mutatóm.
arpsoft Posted March 1, 2006 Posted March 1, 2006 Azért, mert így helyes. A NULL igazából void. Megérti a fordító azt is, ha nem rakod ki, de én ezt szoktam meg, hogy azonos típusokat hasonlítok össze.
Gereby Posted March 10, 2006 Posted March 10, 2006 Kéne egy kis segítség. Kérdésem a következõ: Borland C-ben lehet-e egyáltalán, és ha igen hogyan lehet bitmapokat kitenni a képernyõre? Ha tudna valaki segíteni, annak nagyon hálás lennék. Elõlre is kösz!
Gereby Posted March 22, 2006 Posted March 22, 2006 Nincs semmi megoldás? Már kezd lassan sürgetni az idõ...
shaark Posted March 23, 2006 Posted March 23, 2006 Halisztok! Hogy lehet c++ segítségével egy txt fájlt beolvasni, úgy, hogy a sortörések is, tabok is stb... helyesen mûködjön?
csutomi Posted April 21, 2006 Author Posted April 21, 2006 Borland C-ben lehet-e egyáltalán, és ha igen hogyan lehet bitmapokat kitenni a képernyõre? Lehet, bár nekem még sosem sikerült. Nem a legegyszerûbb feladatok közé tartozik.
Gereby Posted April 21, 2006 Posted April 21, 2006 Akkor az ki lesz hagyva... Nembaj... Majd karakteresen heggesztek valamit
csutomi Posted April 21, 2006 Author Posted April 21, 2006 Akkor az ki lesz hagyva... Nembaj... Majd karakteresen heggesztek valamit Javaslom a pgm formátumot, azt elég egyszerû olvasni, írni. Vagy a wma-t.
arpsoft Posted April 22, 2006 Posted April 22, 2006 Meg van a "Könnyű a Windowst programozni" című könyv? A következő függváényekre lesz szükség: CreateBitmap, CreateCOmpatibleDC, BitBlt. Ismerni kell a BITMAP struktúrát. Más lehetőséged is van, ha nem futái időben kiválasztott képről van szó. Beszerkeszted a resource-be, belefordítod a programodba. Megjeleníteni meg így tudod: Bitmap_Kirak(HINSTANCE hInst, HWND hwndIde, int iEzt) { HDC hDC,hMemDC; HBITMAP hBmp,hBmpOld; BITMAP bm; hBmp=LoadBitmap(hInst,MAKEINTRESOURCE(iEzt)); hDC=GetDC(hwndIde); GetObject(hBmp,sizeof(BITMAP),&bm); hMemDC=CreateCompatibleDC(hDC); hBmpOld = SelectObject(hMemDC, hBmp); BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hBmpOld); DeleteDC(hMemDC); ReleaseDC(hwndIde, hDC); UpdateWindow(hwndIde); DeleteObject(hBmp); } hInst a programod példány azonosítója, hwndIde annak az ablaknak a HWND-je, ahová rajzolni akarsz, iEzt a bitmap resource azonosítója.
csutomi Posted April 22, 2006 Author Posted April 22, 2006 Javaslom a pgm formátumot, azt elég egyszerû olvasni, írni. Vagy a wma-t. Bocs elírtam, nem wma, hanem wmf (,mint Windows MetaFile). (Este volt már ) A következõ függvényeket tudod használni hozzá: CreateMetaFile, PlayMetaFile, CloseMetaFile. Sõt képet menteni is tudsz vele. Ezt szerintem sokkal könnyebb használni és a legtöbb program ismeri is (csak már régen használtam, úgyhogymost nem tudok példát írni). A pgm pedig Portable GrayMap. Ez utóbbi úgy tárolja a képet, hogy van egy fejléce, amiben többek között a kép mérete is benne van, aztán a fájl többi része sorban, pixelenként az összes képpont színe. Ebbõl következik, hogy elég nagy méretû, viszont könnyû használni. Ehhez nincsenek külön függvények a C-ben, de könnyû írni hozzájuk.
Gereby Posted April 22, 2006 Posted April 22, 2006 Én nem windowsban programozok... Én Borland C-ben... Abban is benne vannak ezek?
csutomi Posted April 22, 2006 Author Posted April 22, 2006 Nem. Ezek WinAPI függvények. (Arpsoftéi is.) Egyébként a kettõ nem zárja ki egymást, lehet Borland C-ben Windows programokat írni. Akkor szerintem a legegyszerûbb a pgm formátum, de persze, ha van leírásod a bmp felépítésérõl, azt is megírhatod, csak elég nehéz lesz.
arpsoft Posted April 23, 2006 Posted April 23, 2006 Ebben az esetben csak az a lehetõséged marad, hogy megírod a bmp kezelõ függvényeket. Az említett könyvben megtalálod a bmp fájl formátumát. Elég egyszerû, nem lesz vele gondod.
ocsi Posted April 25, 2006 Posted April 25, 2006 Én is borlandod használok... (most tértem át a builder 6 os verzióra... ) tehát a GCC-t nagyon nem ismerem.... Viszont a helyzet az hogy szükségem lenne rá.. nincs sok kedvem végigolvasni egy adag angol dokumentációt... szóval ha esetleg valaki tud magyart, annak nagyon örülnék... továbbá windowst használok, tehát letöltöttem még a MinGW nevû programot, hogy a GCC-t használhassam windowsban. Mûködik is, a "hello world!" -öt sikerült lefordítattnom, és minden rendben.... DE nekem szükségem lenne OpenGL-re. Google segítségével eljutottam ide: OpenGL-GLUT3.6 Letöltöttem, kicsomagoltam.... letöltöttem az NMAKE nevü progit amivel a makefile okat tudom futtatni, és megpróbáltam futtatni... igenám, de egyszercsak kiírja, hogy nem találja a win32.mak -ot... és tényleg, rákerestem, sehol sincs olyan.... Szóval itt elakadtam.... Talán kicsit összevisszának tûnik a két kérdés.. leírom mégegyszer röviden: (1)Magyar dokumentáció/leírás a GCC hez? (2)GCC-hez OpenGL íl: GLUT "telepítése" Nagy szükségem van most a segítségetekre!
csutomi Posted April 26, 2006 Author Posted April 26, 2006 A második kérdéshez (OpenGL): Szerintem töltsd le a Dev-C++ fejlesztõkörnyezetet. Az használ mingw és gcc fordítót is és alapból lehet vele OpenGL-es programokat is írni (ezt az új projektnél lehet kiválasztani). A példaprogramok között (ha jól emlékszem, az expamles könyvtárban) találsz példát is, hogy hogyan lehet ilyen programot írni. Alapvetõen az a legfontosabb, hogy a fordítónak be kell adni egy paramétert, ami alapján megtalálja az OpenGL-hez használható függvényeket (ha jól emlékszem, akkor -oopenglw32 vagy valami hasonló). (Ezt is meg tudod nézni a példában.)
ocsi Posted April 27, 2006 Posted April 27, 2006 Nagyon köszi, tényleg mûködik!! Már csak meg kell tanulnom használni..
Gereby Posted May 5, 2006 Posted May 5, 2006 Sziasztok! Borland C (3.1)-el kapcsolatban lenne 2 kérdésem. (Illetve ha az elsõre van használható, mûködõképes megoldás, akkor a második nem igazán érdekes. Noss: Borland C-ben szöveges állományt akarok kezelni. Azt nem tudom, hogy lehet-e (és ha igen, akkor hogyan) poziccionálni a fileban. Tulajdonképpen csak az lenne a lényeg, hogy a sorok között tudjak mászkálni, és az adott sort be tudjam olvasni.) Ha az elõzõ nem megvalósítható: Hogyan tudok Borland C-vel (dos vagy windows alatt) fájlokat létrehozni? Tudnátok segíteni? (Eléggé sürgõs lenne... ) Elölre is köszönöm!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now