Conocer la extensión de un archivo

matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   -  
 atchalak -
Hola,
Me gustaría saber si existe alguna función que devuelva la extensión (o el tipo) de un archivo.

Si no lo sabe y conoce una función que devuelva la versión de Microsoft Office, también vale :).

Muchas gracias de antemano.
Configuración: Windows XP Firefox 3.0.9

15 respuestas

  1. matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   47
     
    oui bon bah merci pour ton aide :) ta méthode est 'porc' dans le sens où tu joues avec le feu ;) mais ça me paraît la plus adéquate pour mon problème. Pour peu que je te crée un fichier .blablabla bah ça va merder lors du traitement parce que il croira que l'extension est "abla" au lieu de "blablabla" lol
    1
  2. matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   47
     
    arriba
    0
  3. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
     
    ¿Cómo te da el usuario la ruta del archivo? ¿A través de un cuadro de diálogo u otra cosa?

    ¿En qué lenguaje? ¿VB, PHP, C++?
    0
    1. D4rkness
       
      nana es en HTML :')
      0
  4. matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   47
     
    Pero el título del post es VB, así que bueno, el lenguaje es VB ;)
    Y obtengo la ruta del archivo con la función ActiveDocument.Path .
    De hecho estoy haciendo una macro en un archivo de Excel (o Word) y entonces ya ✓| obtengo la información a partir del documento abierto.
    0
  5. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
     
    entonces todo lo que hay después del '.'..

    ext=Right(ActiveWorkbook.FullName, 5)
    if left(ext,1)<>"." then ext=Right(ActiveWorkbook.FullName, 4)

    Un pequeño problema: si tu archivo de Excel se llama "monfichier..xls" (2003) se tomará como 2007, pero aparte de eso, funciona
    0
    1. matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   47
       
      sí, es también otra forma de verlo, pero hay que tener cuidado porque si la extensión es más larga que 5 caracteres ....
      Gracias por tu respuesta :)
      0
  6. matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   47
     
    Acabo de pensar en un método poco elegante para recuperar la extensión.
    Incrementamos un contador hasta que encontremos un "." en el nombre del archivo, partiendo desde la derecha.
    Y la extensión corresponde a la cadena desde la derecha de longitud igual al contador.

    Pero como ya dije, es poco elegante y demasiado largo para lo que es ^^.
    0
  7. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
     
    jajaja.. ¿y crees que mi solución es 'cerda'??
    0
  8. cthulhu14
     
    Vamos... soy buena gente
    Private Function FileExtension(NomFichier As String) As String Dim DotPos As Integer If InStr(1, NomFichier, ".") = 0 Then FileExtension = False Else While Left(Right(NomFichier, DotPos), 1) <> "." DotPos = DotPos + 1 Wend FileExtension = Right(NomFichier, DotPos - 1) End If End Function
    0
  9. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Hola,

    Aprovecho la reaparición de este tema para proponer una solución variante:
    Dim Extension As String Extension = IIf(Mid(StrReverse(ThisWorkbook.Name), 4, 1) = ".", Right(ThisWorkbook.Name, 3), Right(ThisWorkbook.Name, 4)) 


    --
    🎼 Cordialement,
    Franck 🎶
    0
  10. atchalak
     
     Dim monNomDeFichier As String, extensionDeMonFichier As String extensionDeMonFichier = Right(monNomDeFichier, InStrRev(monNomDeFichier, ".")) 


    Instr devuelve la primera ocurrencia del carácter pasado como argumento, inStrRev permite empezar desde la derecha, en cuanto llegamos al primer ".", solo tenemos la extensión del archivo a la derecha. este método también permite gestionar archivos que tienen uno o más "." en su interior
    0
  11. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
     
    ah bueno, entonces hay que hacer lo contrario, y ahí no hay excepción:

    ext=Right(ActiveWorkbook.FullName, 4)
    if left(ext,1)<> "." then ext=Right(ActiveWorkbook.FullName, 5)

    :) :P

    soy realmente inútil cuando me pongo :)
    -1
  12. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
     
    sinon, puedes hacer algo del estilo:

    ext=Right(ActiveWorkbook.FullName, 4) '2003
    if left(ext,1)<> "." then
    ext=Right(ActiveWorkbook.FullName, 5) '2007
    if left(ext,1)<> "." then
    ext=""
    msgbox "erreur d'extention"
    end if

    bon pour le coup.. c porc, mais ca gere toutes tes expetions :)
    -1
  13. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
     
    ¡ups, lo siento :)

    Right(ActiveWorkbook.FullName, 3)
    -2
    1. matthoffman Mensajes publicados 404 Fecha de registro   Estado Miembro Última intervención   47
       
      Hmm, si no me equivoco, tu función te devolverá las 3 últimas letras del nombre completo, lo que funciona muy bien para Office 2003 pero no para 2007 porque las extensiones tienen 4 letras (docx, xlsx, ...).
      Precisamente me haría falta una función que te recupere la extensión automáticamente para que mi macro pueda adaptarse a 2003 y 2007 sin problemas y sin tener que modificar el código si se cambia de versión.
      0
  14. Yesman
     
    Todas las respuestas son malas y sucias.
    El método oficial es con la API Shell (código de Microsoft)
    -3
    1. jjsteing Mensajes publicados 1613 Fecha de registro   Estado Colaborador Última intervención   181
       
      y entonces, ¿un trozo de código para no morir de ignorancia?
      0
    2. Kamil
       
      Sí, está claro. Hay un tema, una pregunta, así que mejor responder para dar una respuesta válida...
      A mí también me interesa la solución con el shell.
      0
    3. Alex
       
      System.IO.Path.GetExtension(fileName)
      0