Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin. Quel
est la meilleur façon de faire (optimisé temps d'exécution car énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin. Quel
est la meilleur façon de faire (optimisé temps d'exécution car énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin. Quel
est la meilleur façon de faire (optimisé temps d'exécution car énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel est la meilleur façon de faire (optimisé temps d'exécution car
énormément de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel est la meilleur façon de faire (optimisé temps d'exécution car
énormément de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel est la meilleur façon de faire (optimisé temps d'exécution car
énormément de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Salut,
Le 23/06/2013 09:17, Matt... écrivit :const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
Il manque pas +1 pour le séparateur en plus du ?
je souhaiterais concaténer szRepertoire et szFichier dans szChem in.
Quel est la meilleur façon de faire (optimisé temps d'exà ©cution car
énormément de fichier) ?
Je dirais: Fait des testes/benches, ça peut dépendre de la l ibc sur
laquelle ton programme s'exécute, de l'architecture, de la versio n de
GCC utilisée pour compiler le code, etc.
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Sur un plan plus lisibilité du code (subjectif), je préfè re la première.
Salut,
Le 23/06/2013 09:17, Matt... écrivit :
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
Il manque pas +1 pour le séparateur en plus du ?
je souhaiterais concaténer szRepertoire et szFichier dans szChem in.
Quel est la meilleur façon de faire (optimisé temps d'exà ©cution car
énormément de fichier) ?
Je dirais: Fait des testes/benches, ça peut dépendre de la l ibc sur
laquelle ton programme s'exécute, de l'architecture, de la versio n de
GCC utilisée pour compiler le code, etc.
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Sur un plan plus lisibilité du code (subjectif), je préfè re la première.
Salut,
Le 23/06/2013 09:17, Matt... écrivit :const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
Il manque pas +1 pour le séparateur en plus du ?
je souhaiterais concaténer szRepertoire et szFichier dans szChem in.
Quel est la meilleur façon de faire (optimisé temps d'exà ©cution car
énormément de fichier) ?
Je dirais: Fait des testes/benches, ça peut dépendre de la l ibc sur
laquelle ton programme s'exécute, de l'architecture, de la versio n de
GCC utilisée pour compiler le code, etc.
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Sur un plan plus lisibilité du code (subjectif), je préfè re la première.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
(faut arreter la notation prefixe polonaise, qui est juste moche, illisible
et n'apporte rien).
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
(faut arreter la notation prefixe polonaise, qui est juste moche, illisible
et n'apporte rien).
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
(faut arreter la notation prefixe polonaise, qui est juste moche, illisible
et n'apporte rien).
In article , Matt...
wrote:Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel
est la meilleur façon de faire (optimisé temps d'exécution car
énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Mauvaise question.
Elements de reflexion
- sprintf, strcpy, strcat font partie de la bibliotheque standard, don c
sont connus du compilo... ce qui veut dire que celui-ci a le droit
(confere
la norme) d'optimiser les utilisations de ces fonctions de maniere
violente,
y compris en les virant et en remplacant par ses propres boucles.
Vu que tes deux constructions font la meme chose, globalement, ben le
compilo
peut s'en rendre compte et optimiser. La seule vraie facon de voir si
c'est
le cas, c'est de regarder le code genere, ou de chronometrer le result at.
- si on parle de timing, il manque les vrais elements de reflexion. Tu
dis
"beaucoup de fichiers", mais ca ne dit rien. On ne sait pas comment ca
s'organise en terme de boucles et de stockage. Typiquement, est-ce que tu
veux fabriquer TOUS les szChemin pour plus tard, ou est-ce que tu veux
en fabriquer un a la volee pour faire d'autres trucs avec lui ?
- si tu veux fabriquer tous les szChemin pour plus tard, il y a de for tes
chances que le temps d'execution de ces fonctions n'aient qu'une
incidence
minime sur la vitesse de ton code, qui sera domine par le temps
necessaire
pour ecrire plein plein plein de donnees.
- si tu veux fabriquer les szChemin a la volee, est-ce que les
repertoires
sont repartis n'importe comment, ou est-ce que tu as plein de fichiers
d'affilee dans le meme repertoire, auquel cas ca vaut le coup de ne pa s
refaire les calculs plusieurs fois.
Bref, tu nous fais de la micro-optimisation prematuree. Ton probleme
n'est
pas bien pose, la vraie solution est sans doute avant.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
(faut arreter la notation prefixe polonaise, qui est juste moche,
illisible
et n'apporte rien).
C'est pas forcement tres efficace, mais c'est pas forcement important. Et
si ca ne va pas assez vite, je vais commencer par sortir mon profiler, et
trouver les vrais endroits ou optimiser...
In article <op.wy4einga0ht7go@gribouille>, Matt... <mirabon@free.fr>
wrote:
Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel
est la meilleur façon de faire (optimisé temps d'exécution car
énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Mauvaise question.
Elements de reflexion
- sprintf, strcpy, strcat font partie de la bibliotheque standard, don c
sont connus du compilo... ce qui veut dire que celui-ci a le droit
(confere
la norme) d'optimiser les utilisations de ces fonctions de maniere
violente,
y compris en les virant et en remplacant par ses propres boucles.
Vu que tes deux constructions font la meme chose, globalement, ben le
compilo
peut s'en rendre compte et optimiser. La seule vraie facon de voir si
c'est
le cas, c'est de regarder le code genere, ou de chronometrer le result at.
- si on parle de timing, il manque les vrais elements de reflexion. Tu
dis
"beaucoup de fichiers", mais ca ne dit rien. On ne sait pas comment ca
s'organise en terme de boucles et de stockage. Typiquement, est-ce que tu
veux fabriquer TOUS les szChemin pour plus tard, ou est-ce que tu veux
en fabriquer un a la volee pour faire d'autres trucs avec lui ?
- si tu veux fabriquer tous les szChemin pour plus tard, il y a de for tes
chances que le temps d'execution de ces fonctions n'aient qu'une
incidence
minime sur la vitesse de ton code, qui sera domine par le temps
necessaire
pour ecrire plein plein plein de donnees.
- si tu veux fabriquer les szChemin a la volee, est-ce que les
repertoires
sont repartis n'importe comment, ou est-ce que tu as plein de fichiers
d'affilee dans le meme repertoire, auquel cas ca vaut le coup de ne pa s
refaire les calculs plusieurs fois.
Bref, tu nous fais de la micro-optimisation prematuree. Ton probleme
n'est
pas bien pose, la vraie solution est sans doute avant.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
(faut arreter la notation prefixe polonaise, qui est juste moche,
illisible
et n'apporte rien).
C'est pas forcement tres efficace, mais c'est pas forcement important. Et
si ca ne va pas assez vite, je vais commencer par sortir mon profiler, et
trouver les vrais endroits ou optimiser...
In article , Matt...
wrote:Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel
est la meilleur façon de faire (optimisé temps d'exécution car
énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Mauvaise question.
Elements de reflexion
- sprintf, strcpy, strcat font partie de la bibliotheque standard, don c
sont connus du compilo... ce qui veut dire que celui-ci a le droit
(confere
la norme) d'optimiser les utilisations de ces fonctions de maniere
violente,
y compris en les virant et en remplacant par ses propres boucles.
Vu que tes deux constructions font la meme chose, globalement, ben le
compilo
peut s'en rendre compte et optimiser. La seule vraie facon de voir si
c'est
le cas, c'est de regarder le code genere, ou de chronometrer le result at.
- si on parle de timing, il manque les vrais elements de reflexion. Tu
dis
"beaucoup de fichiers", mais ca ne dit rien. On ne sait pas comment ca
s'organise en terme de boucles et de stockage. Typiquement, est-ce que tu
veux fabriquer TOUS les szChemin pour plus tard, ou est-ce que tu veux
en fabriquer un a la volee pour faire d'autres trucs avec lui ?
- si tu veux fabriquer tous les szChemin pour plus tard, il y a de for tes
chances que le temps d'execution de ces fonctions n'aient qu'une
incidence
minime sur la vitesse de ton code, qui sera domine par le temps
necessaire
pour ecrire plein plein plein de donnees.
- si tu veux fabriquer les szChemin a la volee, est-ce que les
repertoires
sont repartis n'importe comment, ou est-ce que tu as plein de fichiers
d'affilee dans le meme repertoire, auquel cas ca vaut le coup de ne pa s
refaire les calculs plusieurs fois.
Bref, tu nous fais de la micro-optimisation prematuree. Ton probleme
n'est
pas bien pose, la vraie solution est sans doute avant.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
(faut arreter la notation prefixe polonaise, qui est juste moche,
illisible
et n'apporte rien).
C'est pas forcement tres efficace, mais c'est pas forcement important. Et
si ca ne va pas assez vite, je vais commencer par sortir mon profiler, et
trouver les vrais endroits ou optimiser...
Le 23/06/2013 10:13, Marc Espie répondait à Matt... :
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
Oui, exactement.
(faut arreter la notation prefixe polonaise, qui est juste moche,
illisible
et n'apporte rien).
La notation hongroise, tu veux dire ? Si oui, je suis entièrement
d'accord aussi.
Le 23/06/2013 10:13, Marc Espie répondait à Matt... :
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
Oui, exactement.
(faut arreter la notation prefixe polonaise, qui est juste moche,
illisible
et n'apporte rien).
La notation hongroise, tu veux dire ? Si oui, je suis entièrement
d'accord aussi.
Le 23/06/2013 10:13, Marc Espie répondait à Matt... :
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille. Cote
lisibilite, je prefere largement
snprintf(fullname, sizeof fullname, "%s/%s", dir, file);
Oui, exactement.
(faut arreter la notation prefixe polonaise, qui est juste moche,
illisible
et n'apporte rien).
La notation hongroise, tu veux dire ? Si oui, je suis entièrement
d'accord aussi.
Le Sun, 23 Jun 2013 10:13:01 +0200, Marc Espie a écrit:[citation intégrale]
Merci pour ta réponse,
[...]
Le Sun, 23 Jun 2013 10:13:01 +0200, Marc Espie <espie@lain.home> a écrit:
[citation intégrale]
Merci pour ta réponse,
[...]
Le Sun, 23 Jun 2013 10:13:01 +0200, Marc Espie a écrit:[citation intégrale]
Merci pour ta réponse,
[...]
En fait, c'est pour copier les fichiers d'un répertoire à un autre.
Je parcours le répertoire A, je récupère le nom du premier fichier, je le
concatène au répertoire B et je copie et ainsi de suite. Donc les chemins
pour les fichiers à copier et copiés sont différents pour chaque itération.
Je vais donc faire des testes avec les deux méthodes.
Question subsidiaire : Pour copier un fichier, j'utilise la libgio
(g_file_copy ()). Est ce un bon choix ?
En fait, c'est pour copier les fichiers d'un répertoire à un autre.
Je parcours le répertoire A, je récupère le nom du premier fichier, je le
concatène au répertoire B et je copie et ainsi de suite. Donc les chemins
pour les fichiers à copier et copiés sont différents pour chaque itération.
Je vais donc faire des testes avec les deux méthodes.
Question subsidiaire : Pour copier un fichier, j'utilise la libgio
(g_file_copy ()). Est ce un bon choix ?
En fait, c'est pour copier les fichiers d'un répertoire à un autre.
Je parcours le répertoire A, je récupère le nom du premier fichier, je le
concatène au répertoire B et je copie et ainsi de suite. Donc les chemins
pour les fichiers à copier et copiés sont différents pour chaque itération.
Je vais donc faire des testes avec les deux méthodes.
Question subsidiaire : Pour copier un fichier, j'utilise la libgio
(g_file_copy ()). Est ce un bon choix ?
Question subsidiaire : Pour copier un fichier, j'utilise la libgio
(g_file_copy ()). Est ce un bon choix ?
Question subsidiaire : Pour copier un fichier, j'utilise la libgio
(g_file_copy ()). Est ce un bon choix ?
Question subsidiaire : Pour copier un fichier, j'utilise la libgio
(g_file_copy ()). Est ce un bon choix ?
In article , Matt...
wrote:Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel
est la meilleur façon de faire (optimisé temps d'exécution car
énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Mauvaise question.
Elements de reflexion
- sprintf, strcpy, strcat font partie de la bibliotheque standard, don c
sont connus du compilo... ce qui veut dire que celui-ci a le droit
(confere
la norme) d'optimiser les utilisations de ces fonctions de maniere
violente,
y compris en les virant et en remplacant par ses propres boucles.
Vu que tes deux constructions font la meme chose, globalement, ben le
compilo
peut s'en rendre compte et optimiser. La seule vraie facon de voir si
c'est
le cas, c'est de regarder le code genere, ou de chronometrer le result at.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille.
In article <op.wy4einga0ht7go@gribouille>, Matt... <mirabon@free.fr>
wrote:
Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel
est la meilleur façon de faire (optimisé temps d'exécution car
énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Mauvaise question.
Elements de reflexion
- sprintf, strcpy, strcat font partie de la bibliotheque standard, don c
sont connus du compilo... ce qui veut dire que celui-ci a le droit
(confere
la norme) d'optimiser les utilisations de ces fonctions de maniere
violente,
y compris en les virant et en remplacant par ses propres boucles.
Vu que tes deux constructions font la meme chose, globalement, ben le
compilo
peut s'en rendre compte et optimiser. La seule vraie facon de voir si
c'est
le cas, c'est de regarder le code genere, ou de chronometrer le result at.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille.
In article , Matt...
wrote:Bonjour,
soit
const char *szRepertoire = "/home/moi/rep";
const char *szFichier = "fichier";
char szChemin[REP_LEN + FIC_LEN + 1] = {0};
je souhaiterais concaténer szRepertoire et szFichier dans szChemin.
Quel
est la meilleur façon de faire (optimisé temps d'exécution car
énormément
de fichier) ?
sprintf(szChemin, "%s/%s", szRepertoire, szFichier);
ou
strcpy(szChemin, szRepertoire);
strcat(szChemin, "/");
strcat(szChemin, szFichier);
Mauvaise question.
Elements de reflexion
- sprintf, strcpy, strcat font partie de la bibliotheque standard, don c
sont connus du compilo... ce qui veut dire que celui-ci a le droit
(confere
la norme) d'optimiser les utilisations de ces fonctions de maniere
violente,
y compris en les virant et en remplacant par ses propres boucles.
Vu que tes deux constructions font la meme chose, globalement, ben le
compilo
peut s'en rendre compte et optimiser. La seule vraie facon de voir si
c'est
le cas, c'est de regarder le code genere, ou de chronometrer le result at.
Personnellement, je n'utiliserai pas sprintf, vu que snprintf est
standard...
Ca m'evitera des jolies gauffres si je me trompe dans ma taille.