
char* GetName (char* filename)
{
*char name_ptr;
name_ptr = strrchr (filename, '/');
if (!name_ptr) {
name_ptr = strrchr (filename, '\');
}
if (name_ptr) {
filename = name_ptr + 1;
}
return filename;
}
Godzil (./33) :Le slash fait partie des caractères interdits dans les noms de fichiers Windows (il était traditionnellement réservé pour les options des programmes en ligne de commande). Certaines fonctions le considèrent comme équivalent au backslash en entrée, probablement pour faciliter la compatibilité avec les programmes prévus pour UNIX, mais (à ma connaissance du moins) aucune n'en renvoie en sortie. Et un chemin du type "X:\machin.chose" ne pose pas de problème non plus, vu qu'il y a un backslash final. Idem pour les chemins réseaux UNC et spéciaux (ceux qui commencent par \\?\ et \\.\).
J'ai un doute sous windows, mais il me semble que (c'est un cas extreme) mais "/" est un caractère valide dans un nom de fichier. En plus si il y a un C: ou equivalent dans le chemin tu va avoir des soucis..
Godzil (./33) :
En plus si il y a un C: ou equivalent dans le chemin tu va avoir des soucis..
Godzil (./33) :
Mais forcement ca n'existe pas sous windows :/ (enfin a traver mingw/cygwin si)
Godzil (./33) :
Sinon globalement ta fonction doit marcher oui, mais tu va avoir des problemes si un nom de fichier contiens / ou \ ou si le "filename" est un dossier avec un / ou \ final
void* buffer [BLOCK_SIZE]; do { size_t write_count; size_t read_count = fread (buffer, 1, BLOCK_SIZE, src); if (read_count < 0) { fprintf (stderr, "Eh merde pour lire... num de la merde = %d\n", errno); //faire joujou avec strerror } write_count = fwrite (buffer, 1, read, dest); if (write_count < 0) { fprintf (stderr, "Eh merde pour ecrire... num de la merde = %d\n", errno); } } while (!feof (src));
do { size_t write_count; size_t read_count = read (srcfd, buffer, BLOCK_SIZE); if (read_count < 0) { fprintf (stderr, "Eh merde pour lire... num de la merde = %d\n", errno); //faire joujou avec strerror } write_count = write (dstfd, buffer, read_count); if (write_count < 0) { fprintf (stderr, "Eh merde pour ecrire... num de la merde = %d\n", errno); } } while (read_count == BLOCK_SIZE); //pas de eof pour les api a file descriptor