Eli miten sais C++:lla tehtyä ohjelman joka tekis/tallentais uuden tekstitiedoston jossa lukis vaikka esimerkki?
striimeillä onnistuu näppärästi, mukaan menoon tarvitaan fstream.h
void tallenna(char *hakemisto) { ofstream file(hakemisto); if(file.is_open()) { file << "tallennetaan tää teksti\n"; // \n rivivaihto luonnollisesti file.close(); } else printf("bugibugii"); }
funktion kutsuminen tapahtuu simppelisti:
tallenna("tiedostonnim.mi");
Toi ei oikee toimi mul, mut se saattaa johtuu siitäki, että alottelen vast C++:ssaa.
Mul tulee tollaset errorit:
e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(5) : error C2065: 'tallenna' : undeclared identifier e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(5) : warning C4129: 'm' : unrecognized character escape sequence e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(9) : error C2373: 'tallenna' : redefinition; different type modifiers e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(10) : error C2065: 'ofstream' : undeclared identifier e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(10) : error C2146: syntax error : missing ';' before identifier 'file' e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(10) : error C2065: 'file' : undeclared identifier e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(11) : error C2228: left of '.is_open' must have class/struct/union type e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(13) : error C2297: '<<' : illegal, right operand has type 'char [25]' e:\joni\cpp jutut\tekstitiedoston tallennus\cpp1.cpp(14) : error C2228: left of '.close' must have class/struct/union type Error executing cl.exe. Cpp1.exe - 8 error(s), 1 warning(s)
Ja laitoin ton lähdetekstit tollee:
#include <iostream.h> void main() { tallenna("c:\moi.txt"); } void tallenna(char *hakemisto) { ofstream file(hakemisto); if(file.is_open()) { file << "tallennetaan tää teksti\n"; // \n rivivaihto luonnollisesti file.close(); } else printf("bugibugii"); }
Taas huomataan että poika-paralla ei ole C++:n perusteet hallussa ei sitten ollenkaan.
Tarvitset fstreamin (fstream / fstream.h) ja stdion (cstdio / stdio.h) iostreamilla et mitään tee? Lisäksi tiedostopolussa oleva kenoviiva tulee eskeipata eli korvata kahdella kenoviivalla. Kaiken lisäksi olet unohtanut määritellä tallena-funktion ennen kuin kutsut sitä.
Käytä kooditageja.
Koska on tylsää, niin heitänpä vielä "oikean koodin" kehiin yllä olevien viestien perusteella. En pääse testaamaan sitä nyt juuri kylläkään. :/
#include <fstream> #include <cstdio> void tallenna(char *hakemisto); void main() { tallenna("c:\\moi.txt"); } void tallenna(char *hakemisto) { ofstream file(hakemisto); if(file.is_open()) { file << "tallennetaan tää teksti\n"; // \n rivivaihto luonnollisesti file.close(); } else printf("bugibugii"); }
Unohtui tuosta vielä "using namespace std;" :-)
Millä voi lukee filun sisällön muuttujaan? Onks se näin:
char manimani [] = ""; file >> manimani; printf("Sul on manii: "); printf(mani); printf("egee.");
Ton heitin hatusta kun en pääse koklaamaan juuri nyt.
Mitäpä jos ei tiedäkkään missä jokin filu siaitsee (siis esim käyttäjän koneella), niin voiks sen hakemistopolun hakee vaikka rekisteriavaimesta ja mitenköhän semmonen onnistuu. Rekkiavaimen luonti? Miten hä? [Oon alottelija]
int mani; file >> mani; printf("sul on manii: %d", foo);
Noinhan se yleensä taitaa hoitua.
Rekisterin hänpläys Windows-ympäristössä menee Reg*-API-kutsuilla eli mm: RegOpenKeyEx (avaa), RegQueryValueEx (lue), RegSetValueEx (kirjoita), RegCloseKey (sulje).
http://msdn.microsoft.com/library/default.asp?
Ainakin VB:lle taitaa putkastakin löytyä monenlaista esimerkkiä rekisterin käytöstä. Soveltamalla niitä homma kääntynee C++:lle suhteellisen luonnollisesti.
Juu kiitti! Tost on hyötyy!
Kiitti, sain vihdoinki toimii :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.