Logo

¡Bienvenido a Stratos!

Acceder

Foros



_splitpath En Linux

Iniciado por zupervaca, 17 de Marzo de 2006, 12:19:53 AM

« anterior - próximo »

zupervaca

 ¿Alguien sabe una funcion equivalente a _splitpath de windows en linux? en windows esta en el stdlib, pero en linux no

ZüNdFoLGe

 La tienes que implementar, hay varias rondando. Te dejo una:


#ifndef __SPLITPATH_HPP__
#define __SPLITPATH_HPP__

#ifdef UNIX
void _splitpath(const char* path, char* drive, char* dir,
               char* fname, char* ext);
#endif

#endif



#ifndef WIN32
#include <config.h>

#include <stdio.h>
#include <string.h>
#include "SplitPath.hpp"

// copia parcial de strings
static inline void strcpypart(char* dest, const char* src, size_t size)
{
   memcpy(dest, src, size);
   dest[size] = 0;
}


void _splitpath(const char* path, char* drive, char* dir,
               char* fname, char* ext)
{

   if(drive)
       strcpy(drive, "");

   const char* lastslash = 0;
   for(const char* p = path; *p != '\0'; p++) {
       if(*p == '/')
           lastslash = p;
   }

   if(dir) {
       if(lastslash == 0)
           strcpy(dir, "");
       else
           strcpypart(dir, path, lastslash - path + 1);
   }


   const char* lastdot = 0;
   const char* begin = (lastslash != 0) ? lastslash+1 : path;
   for(const char* p = begin; *p != '\0'; p++) {
       if(*p == '.')
           lastdot = p;
   }

   if(lastdot==0) {
       if(fname)
           strcpy(fname, begin);
       if(ext)
           strcpy(ext, "");
   } else {
       if(fname)
           strcpypart(fname, begin, lastdot - begin);
       if(ext)
           strcpy(ext, lastdot);
   }

   //printf ("Path: %s => %s - %s - %s - %s.\n", path,
   //  drive, dir, fname, ext);
}

#endif


Fanakito

 Yo (incluso en Windows) uso el modulo boost::filesystem. Si vas a linkear estaticamente (y te sobra 1GB) puedes compilar las Boost enteras y el ya te va incluyendo las .lib propiadas con pragma. Ahora, si no tienes muchas ganas, trasteando un par de hpp y compilando el modulo por separado ya sirve (esto es lo que hago yo).

zupervaca

 Gracias a los dos, por ahora me decanto mas a la opcion de ZüNdFoLGe.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.
Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.