Toon posts:

Wat ik in c# kan wil ik ook in c++ kunnen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een klein console applicatietje nodig dat een aantal regels toevoegt aan alle .asp bestanden in een bepaalde folder. De laatste tijd ben ik vrij veel met c# bezig geweest en had dan ook geen problemen om het hierin in elkaar te draaien. Echter komt het uiteindelijke programma op een Win98 computer te draaien en die zal zonder foutmeldingen niet die c# versie zomaar kunnen draaien.

Dus vandaar mijn vraag of iemand mij wegwijs kan maken hoe ik dit kan klaarspelen in c++. Ik weet wel hoe je iets aan een bestand toevoegt, maar ik weet niet hoe ik zoals in deze C# versie kan loopen door de bestanden in een bepaalde directory (de directory zou ik ook graag via de command line door willen geven, zoals in deze versie) (De code hieronder zoekt overigens naar .txt bestanden ipv .asp dat is voor het testne). Ik hoop dat iemand me kan helpen.

using System;
using System.IO;

namespace ConsoleApplication1
{
class Class1
{
static void Main(string[] args)
{

string FolderPath = args.GetValue(0).ToString();
DirectoryInfo TheFolder = new DirectoryInfo (FolderPath);

foreach (FileInfo NextFile in TheFolder.GetFiles("*.txt"))
{
StreamWriter sw = new StreamWriter (@FolderPath.ToString()+NextFile.Name.ToString(), true);

string line = "<!-- #includefile='includes/controle.asp' -->";
sw.Write (line);
sw.Close();
}

}
}
}

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15-09 19:59

Creepy

Tactical Espionage Splatterer

Je wil dus beweren dat als je iets in C# schrijft, dit compileert, dit dan niet op een windows 98 machine draait? Lijkt me heel erg sterk, maar goed....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Misschien zit ik helemaal fout dat zou best kunnen, ik kan het hier zelf ook jammer genoeg niet testen dat is ook het probleem.

Maar het leek met ook wel logisch omdat c# de CLR nodig heeft om run-time te compileren. Of kan dat gewoon in een standaard Win98?

Dat wordt ook tegensproken door het feit dat iemand het kon draaien (weliswaar met foutmelding).

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Op woensdag 16 januari 2002 14:40 schreef Creepy het volgende:
Je wil dus beweren dat als je iets in C# schrijft, dit compileert, dit dan niet op een windows 98 machine draait? Lijkt me heel erg sterk, maar goed....
Als die Win98 de CLR niet heeft staan, zal het idd niet werken volgens mij.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Kan je die CLR eigenlijk apart installeren zonder de complete .NET framework te hoeven installeren?

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Op woensdag 16 januari 2002 14:11 schreef harjan het volgende:
Dus vandaar mijn vraag of iemand mij wegwijs kan maken hoe ik dit kan klaarspelen in c++. ...maar ik weet niet hoe ik zoals in deze C# versie kan loopen door de bestanden in een bepaalde directory (de directory zou ik ook graag via de command line door willen geven, zoals in deze versie)
Welke compiler gebruik je? Maak je gebruik van Borland C++ of Visual C++ met de MFC?
Voor beide compilers zal er wel een functie, class zijn die die functionaliteit implementeerd, maar jah, welke...
Als je VC++ gebruikt, kun je misschien eens de MSDN doorspitten.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik gebruik VS.NET, maar dan geen managed project maar gewoon een Win32.

In de MSDN is C# fantastisch gedocumenteerd, maar voor C++ vind ik het toch een stukje lastiger. Maar ik zal inderdaad blijven zoeken, hoopte alleen omdat het toch vrij elementair is dat er hier iemand rond zou hobbelen die het weet.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op woensdag 16 januari 2002 14:11 schreef harjan het volgende:
Ik heb een klein console applicatietje nodig dat een aantal regels toevoegt aan alle .asp bestanden in een bepaalde folder. De laatste tijd ben ik vrij veel met c# bezig geweest en had dan ook geen problemen om het hierin in elkaar te draaien. Echter komt het uiteindelijke programma op een Win98 computer te draaien en die zal zonder foutmeldingen niet die c# versie zomaar kunnen draaien.
Ik zou als ik jou was ook eens naar Java kijken. Lijkt een beetje op C# (correctie: C# lijkt op Java). C++ is heel anders dan C#, ondanks de naam. C++ is veel meer low-level dan C# (veel meer op bits en bytes gebaseerd bedoel ik daarmee).

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op woensdag 16 januari 2002 15:11 schreef harjan het volgende:
ik gebruik VS.NET, maar dan geen managed project maar gewoon een Win32.

In de MSDN is C# fantastisch gedocumenteerd, maar voor C++ vind ik het toch een stukje lastiger. Maar ik zal inderdaad blijven zoeken, hoopte alleen omdat het toch vrij elementair is dat er hier iemand rond zou hobbelen die het weet.
't Probleem is dat MS 1) de POSIX standaard voor directories niet volgt, en 2) tot VC7.1 hun compiler essentiele support mist voor templates.
Daardoor werkt de standaard directory library niet.
Onder Linux is het C++ programma dus vrijwel hetzelfde als je C# ; for_each werkt op een range ipv een container maar dat is het enige structurele verschil.
In Win32 zul je dus met GetFirstFile/GetNextFile (?) moeten werken ipv van for_each, daarvoor heb je dus een
do...while(getNextFile) lus nodig.

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


Verwijderd

Topicstarter
Ja de syntax van java lijkt inderdaad veel meer op c# (zeg maar gerust dat c# mega gejat is van java en dat er hier en daar wat mooie dingen zijn toegevoegd). Ik heb wat aardige Java boeken hier liggen en denk ook niet al te lang te hoeven doen over een Java versie (het zijn per slot van rekening niet meer dan 5 regels in c#),

Maar ik wil eigenlijk ook dat die standaard draait op de computer van die klant, zonder een JIT compiler nodig te hebben.

C++ is inderdaad compleet anders, heb ooit nog met DirectX 7 zitten klooien, erg lastig vond ik dat toen al. En toen zat ik er een stuk meer in. Maar omdat dit toch in principe vrij basaal is, moet het toch te doen zijn.

Verwijderd

Topicstarter
Op woensdag 16 januari 2002 15:27 schreef MSalters het volgende:

[..]
In Win32 zul je dus met GetFirstFile/GetNextFile (?) moeten werken ipv van for_each, daarvoor heb je dus een
do...while(getNextFile) lus nodig.
Heb jij wellicht wat goede links met code samples waar ik kan zien hoe ik dit kan bereiken. Je hebt me zeker op het goede pad geholpen, maar c++ mijn kennis is gewoon te laag om met deze info echt iets te kunnen doen.

Verwijderd

Op woensdag 16 januari 2002 15:38 schreef harjan het volgende:

[..]

Heb jij wellicht wat goede links met code samples waar ik kan zien hoe ik dit kan bereiken. Je hebt me zeker op het goede pad geholpen, maar c++ mijn kennis is gewoon te laag om met deze info echt iets te kunnen doen.
Ik las eerder in je postings dat je VS.Net (en dus VC++ .Net) gebruikt. Nou kan ik het vaud hebben maar moet die CLR dan ook niet worden geïnstalleerd? Mijns inziens gebruikt zowel C#, VB.Net als VC++.Net allemaal dezelfde CLR. Wat is dan dus het nut om VC++ te gaan doen (tenzij je andere C++ hebt natuurlijk).

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op woensdag 16 januari 2002 15:55 schreef hvdberg het volgende:
Nou kan ik het vaud hebben maar moet die CLR dan ook niet worden geïnstalleerd?
Bij mijn weten kun je VC++ oko nog compilen naar native win32 exe.

Exact expert nodig?


  • Rukapul
  • Registratie: Februari 2000
  • Nu online
Op woensdag 16 januari 2002 14:40 schreef Creepy het volgende:
Je wil dus beweren dat als je iets in C# schrijft, dit compileert, dit dan niet op een windows 98 machine draait? Lijkt me heel erg sterk, maar goed....
Je moet op die 98 bak waarschijnlijk even het volgende installeren:
http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/msdn-files/027/001/829/msdncompositedoc.xml

De redistributable omvat oa de crl, etc.

Verwijderd

Topicstarter
Ok met het volgende stukje c++ werkt het voor een deel, maar er zit nog een fout in. Ipv dat alle .txt bestanden in de huidige folder die regels toegevoegd krijgen. Krijgt van bijvoorbeeld 3 bestanden, 1 er 1 regel bij en een ander 2 regels en de 3e niks. Het probleem lijkt erin te zetten dat dat ene bewuste bestand een bestandsnaam met spaties heeft. En dat is nu precies wat ik nog heb, ik hoop dus niet dat dat de reden is.

Hier de (aangepaste)code;

#include "stdafx.h"
#include <fstream.h>
#include <atlbase.h>



int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hSearch;
WIN32_FIND_DATA FileData;
BOOL fFinished = FALSE;


hSearch = FindFirstFile("*.txt", &FileData);

while (!fFinished)
{
if (!FindNextFile(hSearch, &FileData))
{
fFinished = TRUE;
FindClose(hSearch);

}
else
{
ofstream examplefile (FileData.cFileName, ios::app);

if (examplefile.is_open())
{
examplefile << "<% file='hoi.asp'%>\n";
examplefile << "<!-- #include file='includes/controle.asp' -->";
examplefile.close();
}

}
}
return 0;
}

  • Cruz
  • Registratie: November 1999
  • Laatst online: 17-10-2025
Je slaat volgens mij ook de eerste file over...
Je doet namelijk eerst een "FindFirstFile" en daarna "FindNextFile" zonder iets ertussen.

Dat er in 1 file 2x die regel staat is als volgt te verklaren :
Als er geen files meer zijn zeg je :
fFinished=TRUE;
FindClose(hSearch);

Hier is het slim om meteen een "return 0;" te doen,
want nu ga je gewoon door. Gevolg is dat, hoewel hSearch gesloten is, de info van de laatste file nog steeds in FileData staat. Daarom wordt hier nog een keer jouw tekst aan toegevoegd.

dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
hSearch = FindFirstFile("*.txt", &FileData);
if (hSearch==NULL) //gokje, als file niet bestaat i.i.g.
   {return 0;}

while (!fFinished)
{
ofstream examplefile (FileData.cFileName, ios::app);
if (examplefile.is_open())
   {
   examplefile << "<% file='hoi.asp'%>\n";
   examplefile << "<!-- #include file='includes/controle.asp' -->";
   examplefile.close();
   }

if (!FindNextFile(hSearch, &FileData))
   {
   fFinished = TRUE;
   FindClose(hSearch);
   }

}

Zo is het allebei opgelost door van te voren te checken. Omdat nu de FindNextFile check aan het eind van de loop staat, wordt er niks meer uitgevoerd als blijkt dat er geen bestanden meer zijn.

HtH

Verwijderd

Topicstarter
Hartstikke bedankt, ik schaam me een beetje dat ik dit zelf niet had gezien. Het werkt zo inderdaad perfect.

Niet alleen de uiteindelijke oplosser bedankt trouwens, iedereen die hier een steentje aan heeft bijgedragen natuurlijk ook.

Harjan.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op woensdag 16 januari 2002 16:45 schreef Cruz het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
hSearch = FindFirstFile("*.txt", &FileData);
if (hSearch==NULL) //gokje, als file niet bestaat i.i.g.
   {return 0;}

while (!fFinished)
{
ofstream examplefile (FileData.cFileName, ios::app);
if (examplefile.is_open())
   {
   examplefile << "<% file='hoi.asp'%>\n";
   examplefile << "<!-- #include file='includes/controle.asp' -->";
   examplefile.close();
   }

if (!FindNextFile(hSearch, &FileData))
   {
   fFinished = TRUE;
   FindClose(hSearch);
   }

}
't kan iets handiger met een
code:
1
do{...} while (FindNextFile());

lus, dan heb je geen bool fFinished nodig, en ook de laatste if niet.
De test op is_open doet waarschijnlijk ook niet helemaal wat je bedoelt, volgens mij wil je weten of ie bruikbaar is. Dat check je gewooon met
code:
1
2
3
 if( examplefile ) {
  // use examplefile
}

[/nitpick]

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

Pagina: 1