PDA

View Full Version : Alcune cosette in C++


leon84
13-04-2004, 15:04
1) Mi interessa conoscere l'anno corrente . So della libreria time.h ma nn sono riuscito a farci nulla

2) Devo poter eseguire comandi dos da un applicazione consolle di c++ .

Di solito faccio system ("comando dos");

Ma per fare cose più complesse ?

Ad esempio devo creare una cartella ma prima devo verificare se già esiste come faccio ?

cionci
13-04-2004, 16:32
2) Se il compilatore lo supporta c'è l'istruzione spawn (attenzione, non è standard)...con tutte le varianti come la exec...
1)

#include <time.h>
#include <stdio.h>

void main()
{
time_t ltime;
struct tm *today;

/* Get UNIX-style time and display as number and string. */
time( &ltime );

/* Use time structure to build a customized time string. */
today = localtime( &ltime );

printf( "Anno %d", today.tm_year);
}

leon84
13-04-2004, 17:25
ok e per vedere se una cartella esiste già o meno che comando eseguo ?

leon84
13-04-2004, 18:02
Nulla da fare cionci l'anno non va .... premetto che io uso Visual Studio .NET ma mi dice che today deve essere una classe . Ho anche provato a togliere il simbolo di puntatore ; a questo punto va ma mi da altri problemi

leon84
13-04-2004, 18:25
Ho provato così e mi va ma mi visualizza "70" e non 2004 perché ?

time_t tempo;
struct tm *today ;
today = localtime(&tempo);
cout << today->tm_year;

cionci
13-04-2004, 19:05
Perchè devi usare questo prima: time( &ltime );

time inzializza ltime alla data corrente (in secondi dal 1/1/1970)...localtime converte la data corrente in secondi in data nella struttura tm...

leon84
13-04-2004, 19:13
che cretino mamma mia ..... ma cmq un problemino ancora ci sarebbe . ti spiego .... al posto del punto ho dovuto usare il referenziato ("->") ma questo nn è un problema . Solo che se uso i compilatori di Microsoft mi dicono di un errore riguardante il permesso in lettura mentre usando dev c++ fila tutto liscio ...

Cmq cionci riguardo alla questione della cartella ? Secondo te come potrei ovviare ? Io avevo pensato di eseguire il comando md cartella e di riversare l'output in un file . Poi mi vado a leggere il file e se trovo subdirectory già esistente so che già esiste . Il fatto è che il comando md non restituisce nulla in output .....

cionci
13-04-2004, 19:18
Create a new directory.

int mkdir( const char *dirname );

in direct.h...non so in quel libreria sia in mingw32...

cionci
13-04-2004, 19:19
Originariamente inviato da leon84
Solo che se uso i compilatori di Microsoft mi dicono di un errore riguardante il permesso in lettura mentre usando dev c++ fila tutto liscio ...
Mi riporti l'errore ?

leon84
13-04-2004, 19:30
Scusa ora ho aggiunto quella riga che avevo scordato e l'errore non me lo da più ma nn mi visualizza proprio nulla ... parlo sempre di compilatori microsoft

cionci
13-04-2004, 19:44
Ti diceva che la variabile non era stata inizializzata ;)

leon84
13-04-2004, 19:49
No cionci mi dava un errore in runtime .... del tipo :

0x000000014 Impossibile leggere .... ecc ....

Ora però non mi visualizza proprio niente

leon84
13-04-2004, 20:11
Ah cionci , altra cosetta . Volendo anche conoscere il giorno giuliano ?

leon84
13-04-2004, 20:18
lascia stare ho capito :D

leon84
14-04-2004, 09:40
Per deterimnare la dimensione di un file in byte come faccio ? A me interessa solo sapere se è vuoto o meno . Secondo te mi conviene aprire il file , scorrerlo per vedere quante righe contiene ? Credo ci sia di meglio .....

cionci
14-04-2004, 09:44
Lo apri in lettura e fai:
fseek(f, 0, SEEK_END);

la dimensione la ottieni con: ftell(f);

leon84
14-04-2004, 09:53
Ho fatto cosi :

input.open("c:\\gpsdata\\2004\\rinex30s\\CERT0970.04n",ios::in);
fseek(input,0,SEEK_END);
cout << "la dimensione è " << ftell(input) << endl;
input.close();

e mi da il seguente errore :

220 main.cpp
cannot convert `input' from type `fstream' to type `FILE *'

leon84
14-04-2004, 09:54
mi sa che l'oggetto da utilizzare deve essere di tipo FILE . Ma cos'è questo tipo ?

cionci
14-04-2004, 09:58
Se usi la open sostituisci tell a ftell e lseek a fseek...
fopen & company (tute quelle con la f insomma) sono le funzioni della libreria standard per i file...

cionci
14-04-2004, 10:01
Azz...comunque non avevo visto che ti interessavo per il C++...
In C++ si usa la ifstream... Se ti interessa ti dico come si fa...

leon84
14-04-2004, 10:03
non mi va .... credo che mi leggero questo
link (http://a2.swlibero.org/a2378.html)

cionci
14-04-2004, 12:14
Allora usa il C++...
In C++ la rpocedura è simile:

long filesize(string filename)
{
ifstream f(filename.c_str());
f.seekg(0, ios::end);
return (long)f.tellg();
}

leon84
04-06-2004, 09:09
Originariamente inviato da cionci
Azz...comunque non avevo visto che ti interessavo per il C++...
In C++ si usa la ifstream... Se ti interessa ti dico come si fa...

ok grazie .... mi interessa ....