Página 1 de 1

Función para abrir archivos

NotaPublicado: 2014-10-30 15:41 @695
por BigBear
Hola, tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub abrir_archivo {
  2. if ($^O =~/Win32/ig) {
  3. system('"'.$_[0].'"');
  4. } else {
  5. system("gedit ".$_[0]);
  6. }
  7. }
  8.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El tema es que la función en Windows no abre bien porque cuando la ruta tiene espacios da error. Recuerdo que en este foro me habían ayudado y me dijeron que agregara " a la ruta. Lo hice pero sigue en lo mismo.

¿ Alguien me puede ayudar ? ¿ En Linux también está el mismo problema ?

Re: Función para abrir archivos

NotaPublicado: 2014-10-30 16:29 @728
por explorer
La opción '/g' te sobra.

En el system() para Windows no estás indicando qué aplicación debe ejecutarse para que abra el archivo. Por ejemplo:

system(qq(notepad.exe "$_[0]"));

El operador qq() hace las mismas operaciones que las comillas dobles. Se usa para cuando el texto a entrecomillar ya tiene comillas.

Para Linux, también pasa lo mismo con el tema de los espacios, por ser una limitación del sistema de línea de comandos, no del sistema operativo o del lenguaje.

system(qq(gedit '$_[0]'));

La diferencia es que en Linux se suele usar comillas simples para rodear texto que queremos que el shell interprete de forma literal.

Caso distinto es abrir el archivo por parte de Perl. Perl lo hace fácil (como siempre, claro):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ echo "Texto de prueba" > 'archivo con espacios.txt'
  2. $ ls -l archivo\ con\ espacios.txt
  3. -rw-r--r-- 1 explorer users 16 oct 30 22:16 archivo con espacios.txt
  4. $ perl -E 'open $fh, "<", "archivo con espacios.txt"; while (<$fh>) { print }'
  5. Texto de prueba
  6. $
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: Función para abrir archivos

NotaPublicado: 2014-10-30 16:54 @746
por explorer
Acabo de acordarme que si a system() (o exec()) le pasamos más de un argumento, entonces los argumentos no pasan por la presencia de metacaracteres.

Entonces, quedaría así:

system('notepad.exe', $_[0]);

Por ejemplo, esto no funciona:

perl -E 'system("cat archivo con espacios.txt")'

pero esto sí:

perl -E 'system("cat", "archivo con espacios.txt")'

Re: Función para abrir archivos

NotaPublicado: 2014-11-19 06:56 @331
por Tizianatellez
Muchas gracias, ¡tenía el mismo problema!