Recuperation date system UNICODE

Résolu
Signaler
Messages postés
39
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
7 juillet 2006
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Salut a tous... Me revoila dans mes peregrinations pour faire ce que je veux avec ce ***** d'UNICODE.

J'essaie en ce moment de recuperer la date sys dans une chaine.

Voila comment je m'y prend pour le moment :

SYSTEMTIME datesys;
GetSystemTime(&datesys);

Jusque la pas de probleme... Vient ensuite de creer une chaine de caractère a partir de ca...

TCHAR[30] strdate;
TCHAR *tmp = strdate;

wcscat(tmp,datesys.wDay);

J'essaie ensuite de creer un fichier qui porterai ce nom

FILE *fichiertest;
fichiertest = _wfopen (test, TEXT("w"));

Mais voila... Rien ne se crée... Je penses que le probleme vient de wcscat qui m'a poser plein de probleme comme par exemple, si j'essaue de concatener plusieurs chaine ensemble avec et ensuite de les affichier n'importe ou, le texte arrive bugger. Par exemple si je concatennes "LIEU", une var, "ILOT", une var je vais me retrouver avec unevar"ILOT"unevar. le premier lieu a disparu. Et lors des chargements futurs ce sera de pire en pire...

Quelqu'un aurait il une idée ?

Merci d'avance


<CENTER>Mess with the best
Die Like the rest</CENTER>

8 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
void GenNom(TCHAR *pextens, TCHAR *pfile)
{
TCHAR *c;
SYSTEMTIME datesys;
GetSystemTime(&datesys);
wcscat(test,p_Type);


_ultow(datesys.wDay, pfile, 10);
c = pfile;
while(*c) c++; // AU BOUT, EVITERA LES CONCAT
_ultow(datesys.wMonth, c, 10);
while(*c) c++; // ENCORE AU BOUT
_ultow(datesys.wYear, c, 10);
while(*c) c++; // ENCORE AU BOUT
_ultow(datesys.wHour, c,10);
while(*c) c++; // ENCORE AU BOUT
_ultow(datesys.wMinute, c, 10);
while(*c) c++; // ENCORE AU BOUT
_ultow(datesys.wSecond, c, 10);
wcscat(c, pextens);
}



TCHAR NomFichier[30];


on appelle:
GenNom(_TEXT(".txt"), NomFichier);
et NomFichier sera rempli.

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Evite de mélanger le codage, si tu utilises API (impec) faut rester cohérent.
HANDLE hfl;
hfl = CreateFile(...);
les FILE* et autres bidules de ce genre n'ont rien à faire ici.

wcscat est pour concaténer des chaines, on ne concat pas du binaire.
ultow devrait aller mieux.

ciao...
BruNews, MVP VC++
Messages postés
39
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
7 juillet 2006

Tu es definitivement mon maitre :)

Merci beaucoup !


<CENTER>Mess with the best
Die Like the rest</CENTER>
Messages postés
39
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
7 juillet 2006

Definitivement ce wcscat me pose probleme... voila comme je genere le nom de mon fichier

TCHAR* CFichier::GenNom()
{
TCHAR strdate[30],datepart[10];
TCHAR* test = strdate;
TCHAR* tmp = datepart;
SYSTEMTIME datesys;
GetSystemTime(&datesys);
wcscat(test,TEXT("INVE"));


_ultow(datesys.wDay,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wMonth,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wYear,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wHour,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wMinute,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wSecond,tmp,10);
wcscat(test,tmp);
wcscat(test,TEXT(".txt"));


return test;
}

Et en sorti j'ai...??????? `?

Pourtant lorsque je ne mets que INVE et le jour ca marche nickel...


<CENTER>Mess with the best
Die Like the rest</CENTER>
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
mais c'est quoi tout cela ???
faut te plonger dans un bouquin de C illico sinon tu vas perdre du temps et rien de plus, je le dis pour ton bien alors ne le prends pas mal.
On ne peut pas retourner une adresse sur pile (return test;) dont les octets ont toute chance d'être écrasés en sortie de fonction, celle ci relevant ESP (ou l'appelant) à sa sortie. On passe adresse d'un buffer à la fonction qui le remplira, voila une méthode saine.

ciao...
BruNews, MVP VC++
Messages postés
39
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
7 juillet 2006

C'est pas tant le C ou le C++ qui me pose probleme... C'est juste que je manques un peu d'entrainement sur les pointeurs... Et que mon boss est tellement rat qu'il y a pas moyen d'avoir un bouquin...

Bon j'ai un peu modifier suivant tes indications mais c'est pas encore ca... Je sais qu'il me manque une connerie mais j'arrives pas a trouver quoi...

TCHAR NomFichier[30];
TCHAR *strfichier = NomFichier;

Je passes nomfichier dans la fnc

void CFichier::GenNom(TCHAR *p_Type, TCHAR *p_Retour)
{
TCHAR strdate[30],datepart[10];
TCHAR *test = strdate;
TCHAR *tmp = datepart;
SYSTEMTIME datesys;
GetSystemTime(&datesys);
wcscat(test,p_Type);


_ultow(datesys.wDay,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wMonth,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wYear,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wHour,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wMinute,tmp,10);
wcscat(test,tmp);
_ultow(datesys.wSecond,tmp,10);
wcscat(test,tmp);
wcscat(test,TEXT(".txt"));


*p_Retour =*test;
}


<CENTER>Mess with the best
Die Like the rest</CENTER>
Messages postés
39
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
7 juillet 2006

Heuuu... Ca marche... Je sais pas comment... J'ai suis pas vraiment sur d'avoir compris le while(*c) c++; // ENCORE AU BOUT

C'estr koi le principe. Ca fait defiler la chaine jusque tomber sur un caractere vide (ou le pointeur retournera null) ?

En tout cas merci...


<CENTER>Mess with the best
Die Like the rest</CENTER>
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
concat va chercher fin de chaine (1er valeur NULL), on ne refera donc pas tous ces parcours à chaque fois donc on pousse un pointeur sur fin de chaine et on écrit à son adresse.
Rien de sorcier.

ciao...
BruNews, MVP VC++