Toon posts:

[C++] probleem met in een bestand te schrijven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil dus een script maken dat ervoor zorgt dat er in een bestaand bestand helemaal bovenaan iets bij in geschreven wordt, maar ik ben nog maar een C++ n00b dus het is niet echt goed gelukt.
Dus ik zal even alles uitleggen:

dit is mijn script (voor zover ik het gevonden heb):

C++:
1
2
3
4
5
6
7
8
9
10
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>

int main()
{
  basic_fstream ofs("autoexec.bat", ios:app);
  basic_fstream ofs(ios::beg) << "Goede morgend!" << endl;
  basic_fstream.close();
}


Dus mijn bedoeling is eigenlijk dat de tekst Goede morgend! helemaal bovenaan in het bestand autoexec.bat geplaatst wordt.

Ik krijg verschillende errors (nogal veel om op te noemen :( ), maar er is er 1 die me nogal hard opvalt, namelijk:
std::fstream ofs' redeclared as different kind of symbol
en previous declaration of `std::fstream ofs(...)'
Dit probleem heb ik alleen als ik ofterwijl fstream.h include if iostream.h include, maar ik heb beide bestanden nodig en van zodra dat ik ze alletwee include heb ik die error, voor de rest zijn er nog enkele parse errors. Zou er iemand mij aub willen helpen en me verder willen helpen met dit scriptje?

grtz

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

Je moet even onder de #include-regels (en nog voor int main) zetten: "using namespace std;" (zonder aanhalingstekens). :)

[ Voor 28% gewijzigd door _the_crow_ op 05-11-2003 21:24 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Verwijderd

Topicstarter
ok, bedankt :)

maar euhm, nu heb ik nog 3 foutmeldingen, nl.:
plus!2.8.cpp:11: `basic_fstream' undeclared (first use this function)
plus!2.8.cpp:11: (Each undeclared identifier is reported only once for each
function it appears in.)
plus!2.8.cpp:11: parse error before `(' token
(allemaal in dezelfde regel dus)

ik zal dan ook even het scriptje nog eens zetten, dan moet niet iedereen eerst de regels weer gaan tellen ;)

C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>

using namespace std;

int main()
{
  basic_fstream ofs("autoexec.bat", ios:app);
  basic_fstream ofs(ios::beg) << "plus!.bat" << endl;
  basic_fstream.close();
}


en nu nog even die 3 weg zien te krijgen en dan kan ik tevreden verder werken

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

Ik denk dat je tussen ios en app twee ":"-en moet doen. Maar ja. Dat zit niet in regel 11. :/

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Verwijderd

Topicstarter
nee, ik denk ook niet dat het dat is, want ik heb in een boek gekeken daarvoor en in dat boek staat zo een hele reeks met ios en daar staat dat ook met 1 : :)

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

Ik heb zelf een progsel gedevt en daar staat het volgende ook nog bovenaan:
C++:
1
ifstream inFile;

Waarbij dan inFile dan refereerd naar een file die geopend wordt voor input. :)
Misschien moet er bij jou ook zoiets boven.

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Verwijderd

Topicstarter
nee, dat helpt niet, dan krijg ik nog net dezelfde foutmeldingen
(maar btw, ik heb geen ifstream gebruikt, maar fstream)
maar als ik nu die fstream vervang door ifstream krijg ik ook nog net dezelfde foutmeldingen

zou je anders even dat script dat je net gedevt hebt anders even willen posten, dan kan ik daar eens mee proberen vergelijken ofzo?
(euhm, dit telt toch niet als scriptrequest hoop ik, anders moet je het maar pm'en ofzo :? )

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

Verwijderd schreef op 05 november 2003 @ 21:43:
nee, dat helpt niet, dan krijg ik nog net dezelfde foutmeldingen
(maar btw, ik heb geen ifstream gebruikt, maar fstream)
maar als ik nu die fstream vervang door ifstream krijg ik ook nog net dezelfde foutmeldingen

zou je anders even dat script dat je net gedevt hebt anders even willen posten, dan kan ik daar eens mee proberen vergelijken ofzo?
(euhm, dit telt toch niet als scriptrequest hoop ik, anders moet je het maar pm'en ofzo :? )
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <fstream>
using namespace std;

int main() {
  char sourceFile[255];      // filename/path voor invoer-file
  char targetFile[255];      // filename/path voor uitvoer-file
  ifstream inFile;           // fstream voor invoer-file
  ofstream outFile;          // fstream voor uitvoer-file
  char kar;                  // Var voor inlezen van karakters uit file

  //// Invoer source- en targetfile:
  cout << "Voer de naam van het te converteren bestand in: ";
  cin >> sourceFile;
  cout << "Voer de naam van het uitvoerbestand in: ";
  cin >> targetFile;

  inFile.open(sourceFile, ios::in); // Open ingevoerde source-file voor invoer
  if (!inFile) {                 // Als invoerfile niet bestaat:
    cout << "Niet bestaande invoerfile ingevoerd!" << endl
         << "Het programma wordt beeindigd." << endl;
    return 1;                    // Einde programma
  }
  outFile.open(targetFile, ios::out); // Open ingevoerde target-file voor uitvoer
.........
  outFile.put(kar); // Schrijf karakter naar outFile
.........
} // main

Maar dit is dus niet met append. Misschien is het makkelijk aan te passen. Ik heb nog nooit met append gewerkt. :)

[ Voor 15% gewijzigd door _the_crow_ op 05-11-2003 21:48 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Verwijderd

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream>    // for fstream
#include <iostream>   // for cout, endl
//#include <stdlib.h> 

using namespace std;

void main( void )
{ 
  fstream ofs("autoexec.bat", ios::app );
  ofs.seekg( ios::beg );
  ofs << "Goede morgend!" << endl; 
  ofs.close(); 
}


Dit compiled zonder problemen...

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
C++:
1
2
3
  basic_fstream ofs("autoexec.bat", ios:app); 
  basic_fstream ofs(ios::beg) << "plus!.bat" << endl; 
  basic_fstream.close(); 
Je declareert telkens weer een nieuwe basic_fstream genaamd ofs. Je doet dus één maal basic_fstream ofs( ) waarmee je het object maakt en daarna spreek je het object aan bij zijn naam, dus ofs << "bla" << std::endl.

Je moet het als volgt zien: Stel we maken een mens genaamd henk. Als ik dan henk iets wil laten doen zeg ik ook 'henk, doe dit' :)
Verder kun je de .h weglaten bij iostream en fstream headers en begrijp ik niet wat je met
C++:
1
basic_fstream ofs(ios::beg) 
wilt doen (nog een basic_fstream maken?)

Verwijderd

Topicstarter
Glimi schreef op 05 november 2003 @ 21:58:
en begrijp ik niet wat je met
C++:
1
basic_fstream ofs(ios::beg) 
wilt doen (nog een basic_fstream maken?)
de bedoeling van die ios::beg was eigenlijk om bovenaan in die file te laten schrijven...

  • Luno
  • Registratie: Oktober 2003
  • Laatst online: 14-06-2025
Soms helpt het om er een andere compiler tegenaan te gooien, dus ik heb even Watcom C++ compiler gebruikt (en het progje test.cpp genoemd)

Ik krijg de volgende meldingen

Watcom C/C++32 Compile and Link Utility Version 11.0
Copyright by Sybase, Inc., and its subsidiaries, 1988, 1997.
All rights reserved. Watcom is a trademark of Sybase, Inc.
wpp386 test.cpp
Watcom C++32 Optimizing Compiler Version 11.0
Copyright by Sybase, Inc., and its subsidiaries, 1989, 1997.
All rights reserved. Watcom is a trademark of Sybase, Inc.
test.cpp(5): Error! E833: col(17) name does not reference a namespace
test.cpp(9): Error! E006: col(17) syntax error; probable cause: missing ';'
test.cpp(10): Error! E006: col(17) syntax error; probable cause: missing ';'
test.cpp(11): Error! E029: col(16) symbol 'basic_fstream' has not been declared
test.cpp(12): Error! E003: col(1) missing return value
test.cpp: 12 lines, included 2180, no warnings, 5 errors
Error: Compiler returned a bad status compiling 'test.cpp'

Kan er verder niets mee, blijf gewoon zelf C gebruiken, maar misschien geeft het voor jou meer info. In ieder geval de laatste foutmelding klopt je declareert main als een functie die een integer teruggeeft, dus zou je moet eindigen met return(0) o.i.d.

CU Luno
C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>

using namespace std;

int main()
{
  basic_fstream ofs("autoexec.bat", ios:app);
  basic_fstream ofs(ios::beg) << "plus!.bat" << endl;
  basic_fstream.close();
}


en nu nog even die 3 weg zien te krijgen en dan kan ik tevreden verder werken

[ Voor 15% gewijzigd door Luno op 05-11-2003 22:06 ]


Verwijderd

Topicstarter
ok, het probleem is opgelost, ty dudes :)
mijn programma ziet er nu als volgt uit:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream>    // for fstream 
#include <iostream>   // for cout, endl 
#include <stdlib.h>  

using namespace std; 

int main( void ) 
{  
  fstream ofs("autoexec.bat", ios::app ); 
  ofs.seekg( ios::beg ); 
  ofs << "plus!.bat" << endl;  
  ofs.close();  
}

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03-2025

_the_crow_

Rare vogel

Ik vraag me alleen af waarom er void staat tussen die parameter-haakjes van de main-functie. :?
Lijkt overbodig. Toch?

[ Voor 15% gewijzigd door _the_crow_ op 05-11-2003 22:09 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Verwijderd

Topicstarter
ja, maar in sommige gevallen heeft hij die wel nodig, dus ik zet het er meestal toch maar bij :)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Nee, de functieargumentenlijst (void) is identiek aan (). De void daar is nooit nodig.

Verder kan (void) ook nog voorkomen als cast, maar dat is hooguit nodig om een compiler warning te onderdrukken; het voorkomt geen errors. Een beginnend programmeur zal daar eigenlijk nooit tegenaan lopen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

de basic_*streams zijn template classes. Er missen dus template argumenten, 2 om precies te zijn. De 2e is default, dus die hoef je niet te specificeren als die default waarde voldoet, en de eerste parameter geeft aan wat voor type elk teken in de stream moet zijn (dus char voor ascii, wchar_t voor unicode, etc.)

Overigens wil je over het algemeen gewoon char, en dan gebruik je dus de *streams (zonder basic_ ervoor dus), omdat dat typedefs zijn voor basic_*stream<char>

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
ok, eigenlijk is er nog 1 klein probleempje :|

het is eigenlijk de bedoeling dat dat er ipv gewoon plus!.bat, c:\plus!.bat geschreven wordt in het bestand, maar als ik dat doe dan geeft hij een warning dat hij \p niet kent als sequence, maar dat is eigenlijk ook niet de bedoeling, want het is gewoon de tekst die hij moet schrijven, dus mijn vraag was nu:
als hij die warning geeft, schrijft hij dan gewoon c:\plus!.dat zoals mijn bedoeling is of stopt hij bij \p en kom er dus c: of slaagt hij gewoon \p over en komt er c:plus.dat???

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-08 00:10
Slashes escapen: \ wordt \\.

Verwijderd

Topicstarter
dus als ik dan wil dat het programma c:\plus!.bat schrijft, wat moet ik dan in mijn programma zetten?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 07 november 2003 @ 16:28:
dus als ik dan wil dat het programma c:\plus!.bat schrijft, wat moet ik dan in mijn programma zetten?
C++:
1
"c:\\plus!.bat"

Koop een boek? :?

Professionele website nodig?


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
C++:
1
"c:/plus!.bat" // werkt ook

[ Voor 16% gewijzigd door MSalters op 07-11-2003 17:56 ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 30-07 16:33
De regel die jouw .bat bestand aanroept overschrijft wel de eerste bytes van autoexec.bat, dat wordt niet opgeschoven.

Verwijderd

Topicstarter
ow, dat mag eigenlijk niet
weet jij dan hoe dat anders kan zodat de eerste bytes niet overschreven worden?
want dat is eigenlijk wel een probleem...

  • twit
  • Registratie: September 2002
  • Laatst online: 20-08 20:24
Verwijderd schreef op 07 november 2003 @ 20:23:
ow, dat mag eigenlijk niet
weet jij dan hoe dat anders kan zodat de eerste bytes niet overschreven worden?
want dat is eigenlijk wel een probleem...
Ik vrees dat je dan iets of wat meer werk zult moeten gaan verrichten en om heel eerlijk te zijn ben ik bang dat je er dan niet meer komt met nog 10 replies @ dit topic. Je moet gewoon proberen te snappen WAAROM het zo werkt zoals de mensen hier zeggen en dan kun je eens gaan kijken hoe je de boel opschuift.

gutta cavat lapidem non vi, sed saepe cadendo. Sic homo fit doctus, non vi, sed saepe legendo

Pagina: 1