Kezdőoldal » Számítástechnika » Programozás » C nyelv: alábbi fájlmásoló...

C nyelv: alábbi fájlmásoló programba hogy lehet időmérést, százalék-kijelzést tenni? (bővebben lent)

Figyelt kérdés

Az alábbi kis programot hogyan, miképpen lehetne úgy átírni, hogy a bemeneti fájl tartalmát kimeneti fájlba másolja, mindig annyit olvasson be, amennyi a memóriába éppen befér? A másolás előrehaladásáról tájékoztasson százalékos formában, de csak akkor ha az adott százalékos érték osztható 10 számmal?

Azt miképpen lehet megoldani, hogy az időt is mérje, másolás elejétől és a végén írja ki mennyi ideig tartott a teljes másolás?

Ezek nagy részét másik programozási nyelvben meg tudom valósítani (kivéve a "memóriába annyit olvasni mint amennyi belefér problémát"), de C nyelven sajnos nem.

Milyen függvények kellenek? A fseek-ről azt olvastam például, hogy csak 2 GB méretű fájlokig jó.

Malloc függvény kell talán a memóriába történő olvasásra.

Ha ekkor nincs puffer, mert a memóriába annyi van olvasva mint amennyi belefér, akkor ha meg szeretnék változtatni egy-két bájtot például a fájlon, hogy kimenetbe már a változtatás kerüljön, azt hogy kell csinálni?


Sajnos, hibás a program:


fajlos.c: In function ‘main’:

fajlos.c:15:1: error: expected declaration or statement at end of input

}


#include <stdio.h>

int main(int argc, char *argv[]){

FILE *be, *ki;


int ertek;


be=fopen(argv[1],"rb");

ki=fopen(argv[2],"wb");


while((ertek=fgetc(be))!=EOF){

ertek=fputc(ertek,ki);

fclose(ki);

fclose(be);

return 0;

}



2020. szept. 26. 07:41
1 2
 11/19 anonim ***** válasza:
63%

Az a kérdés, hogy mi a jelentős?

Én írtam már effélét és nem számottevő a különbség, de ízlés (és üzemi leterheltség) kérdése. Egy kihasználtabb szervernél már okozhat számottevő lassulást.


A tömb is nagyon jó puffernek, de akár byte-onként is lehet másolni, csak ha nagy a másolandó file akkor ugye, nem tanácsos, meg hát nem is ésszerű.

2020. szept. 26. 11:21
Hasznos számodra ez a válasz?
 12/19 anonim ***** válasza:
Hát int az azért ne legyen!!
2020. szept. 26. 11:22
Hasznos számodra ez a válasz?
 13/19 anonim ***** válasza:

Ha megfelel kis C++ is, akkor itt a megoldás:


[link]


Dinamikus memóriába lefoglal alapból 40MB-ot, azt használja buffernek. Simán átmásoltam vele egy 9GB-os .mkv-t és ment gond nélkül, 20mp alatt meg is volt az SSD-men.


Ha csak C kell, akkor a chrono mérést kicseréled GetTickCount-ra (Windows.h szükséges azt hiszem, de az csak windowson fog menni), a new és delete kulcsszót meg malloc és free-re.

2020. szept. 26. 11:32
Hasznos számodra ez a válasz?
 14/19 anonim ***** válasza:

Ezt nézd meg:


[link]

2020. szept. 26. 11:32
Hasznos számodra ez a válasz?
 15/19 A kérdező kommentje:

Nagyon szépen köszönöm a válaszokat, a képet és a forráskódot is.

A kód sima C nyelvre történő átírásakor az include-ot nem kell lecserélni? (#include <stdio.h>})

Nagyon köszönöm a kód megírását.

2020. szept. 26. 13:06
 16/19 anonim ***** válasza:

Szívesen. Már vagy 3 hónapja nem írtam egy sor kódot se, szóval örültem a kihívásnak :D


Amúgy nem értem a kérdésed, hogy mit akarsz az stdio.h-val. Szerintem ez megy nélküle is, mert én se includoltam azt. Ha véletlenül mégsem, akkor tedd csak oda.

2020. szept. 26. 15:31
Hasznos számodra ez a válasz?
 17/19 A kérdező kommentje:

Elnézést, mivel kell ezt lefordítani? Se cpp, se gcc nem fordítja le, már a legelső sornál megáll, az "iostream" nem tetszik neki.

Átírva include részeket "stdio.h", "string.h", "time.h": a helyzet így sem javul.

Sajnos C-ből nagyon kezdő vagyok még.

2020. szept. 26. 15:34
 18/19 anonim ***** válasza:

Azoknak is lekéne, hogy tudják fordítani, viszont fogalmam sincs, hogy. Elméletileg ugyanúgy kéne működni, mitn a visual studionak. Soha nem használtam őket windowson. Csak linuxon GCC-t jó pár éve.


Windowson ajánlatos Visual Studio-t használni, talán az a legelterjedtebb és ingyenes is. Ha bármit is írok windowsra, csak ezt használom.


[link]


Itt simán rámész h New project -> C++ console app, létrehozod. Beállítod a beállításokban a Multi-byte character set-et (Properties -> Advanced -> Character set), berakod a kódot a main.cpp-be és fordíthatod is.

2020. szept. 26. 15:46
Hasznos számodra ez a válasz?
 19/19 A kérdező kommentje:
Köszönöm szépen a maximálisan segítőkész válaszokat és a kódot, sajnálom hogy ennyi amatőr kérdésem van ezzel kapcsolatban.
2020. szept. 26. 15:49
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!