CONTENIDO

  • NOMBRE
  • SINOPSIS
  • DESCRIPCIÓN
  • REGRESO
  • NOTAS
  • AUTOR

NOMBRE

Archivo :: Copiar: copia archivos o identificadores de archivos

SINOPSIS

use File::Copy;

copy("sourcefile","destinationfile")ordie"Copy failed: $!";
copy("Copy.pm",*STDOUT);
move("/dev1/sourcefile","/dev2/destinationfile");use File::Copy "cp";$n= FileHandle->new("/a/file","r");
cp($n,"x");

DESCRIPCIÓN

El módulo File :: Copy proporciona dos funciones básicas, copy y move, que son útiles para llevar el contenido de un archivo de un lugar a otro.

Copiar

los copy La función toma dos parámetros: un archivo para copiar y un archivo para copiar. Cualquiera de los dos argumentos puede ser un string, una referencia de FileHandle o un glob FileHandle. Obviamente, si el primer argumento es un identificador de archivo de algún tipo, se leerá desde, y si es un archivo nombre se abrirá para lectura. Asimismo, se escribirá en el segundo argumento. Si el segundo argumento no existe pero el directorio principal sí existe, se creará. Intentar copiar un archivo en un directorio inexistente es un error. Intentar copiar un archivo encima de sí mismo también es un error. copy no sobrescribirá archivos de solo lectura.

Si el destino (segundo argumento) ya existe y es un directorio, y la fuente (primer argumento) no es un identificador de archivo, entonces el archivo fuente se copiará en el directorio especificado por el destino, utilizando el mismo nombre base que el archivo fuente. . Es un error tener un identificador de archivo como origen cuando el destino es un directorio.

Tenga en cuenta que pasar archivos como identificadores en lugar de nombres puede provocar la pérdida de información en algunos sistemas operativos; se recomienda que utilice nombres de archivo siempre que sea posible. Los archivos se abren en modo binario cuando corresponda. Para obtener un comportamiento coherente al copiar de un identificador de archivo a un archivo, utilice binmode en el identificador del archivo.

Se puede utilizar un tercer parámetro opcional para especificar el tamaño del búfer utilizado para la copia. Este es el número de bytes del primer archivo, que se mantendrá en la memoria en un momento dado, antes de escribirse en el segundo archivo. El tamaño del búfer predeterminado depende del archivo, pero generalmente será el archivo completo (hasta 2 MB) o 1k para los identificadores de archivo que no hacen referencia a archivos (por ejemplo, sockets).

Puedes usar la sintaxis use File::Copy "cp" para llegar al cp alias para esta función. La sintaxis es exactamente lo mismo. El comportamiento también es casi el mismo: a partir de la versión 2.15, cp preservará los bits de permiso del archivo fuente como la utilidad de shell cp(1) haría, mientras copy utiliza los permisos predeterminados para el archivo de destino (que puede depender del proceso ‘ umask, propiedad de archivos, ACL heredadas, etc.). Si se produce un error al configurar los permisos, cp devolverá 0, independientemente de si el archivo se copió correctamente.

moverse

los move La función también toma dos parámetros: el nombre actual y el nombre previsto del archivo que se va a mover. Si el destino ya existe y es un directorio, y el origen no es un directorio, el archivo de origen se cambiará de nombre al directorio especificado por el destino.

Si es posible, move () simplemente cambiará el nombre del archivo. De lo contrario, copia el archivo en la nueva ubicación y elimina el original. Si una se produce un error Durante este proceso de copia y eliminación, es posible que se quede con una copia (posiblemente parcial) del archivo con el nombre de destino.

Puede utilizar el mv alias para esta función de la misma manera que puede usar el cp alias para copy.

syscopy

File :: Copy también proporciona la syscopy rutina, que copia el archivo especificado en el primer parámetro al archivo especificado en el segundo parámetro, conservando el sistema operativo específico attributes y estructura de archivos. Para los sistemas Unix, esto es equivalente a la simple copy rutina, que no conserva el sistema operativo específico attributes. Para los sistemas VMS, esto llama rmscopy rutina (ver más abajo). Para los sistemas OS / 2, esto llama al syscopy XSUB directamente. Para los sistemas Win32, esto llama Win32::CopyFile.

Comportamiento especial si syscopy está definido (OS / 2, VMS y Win32):

Si ambos argumentos para copy no son identificadores de archivos, entonces copy realizará una “copia del sistema” del archivo de entrada a un nuevo archivo de salida, con el fin de conservar el archivo attributes, estructura de archivos indexados, etc. El parámetro de tamaño del búfer se ignora. Si cualquiera de los argumentos para copy es un identificador para un archivo abierto, luego los datos se copian usando operadores Perl, y no se hace ningún esfuerzo para preservar el archivo attributes o estructura de registro.

La rutina de copia del sistema también se puede llamar directamente en VMS y OS / 2 como File::Copy::syscopy (o bajo VMS como File::Copy::rmscopy, que es la rutina que hace el trabajo real para syscopy).

rmscopy ($ desde, $ hasta[,$date_flag])

El primer y segundo argumento pueden ser cadenas, typeglobs, referencias de typeglob u objetos heredados de IO :: Handle; se utilizan en todos los casos para obtener la especificaciónarchivo de los archivos de entrada y salida, respectivamente. El nombre y el tipo del archivo de entrada se utilizan como valores predeterminados para el archivo de salida, si es necesario.

Siempre se crea una nueva versión del archivo de salida, que hereda la estructura y RMS attributes del archivo de entrada, excepto para el propietario y las protecciones (y posiblemente las marcas de tiempo; consulte a continuación). Todos los datos del archivo de entrada se copian en el archivo de salida; si alguno de los dos primeros parámetros rmscopy es un identificador de archivo, su posición no ha cambiado. (Tenga en cuenta que esto significa que un identificador de archivo que apunta al archivo de salida se asociará con una versión anterior de ese archivo después de rmscopy devuelve, no la versión recién creada).

El tercer parámetro es una bandera de número entero, que dice rmscopy cómo manejar las marcas de tiempo. Si esto es < 0, none of the input file's timestamps are propagated to the output file. If it is > 0, entonces se interpreta como una máscara de bits: si se establece el bit 0 (el LSB), se propagan las marcas de tiempo distintas de la fecha de revisión; si se establece el bit 1, se propaga la fecha de revisión. Si el tercer parámetro para rmscopy es 0, entonces se comporta de manera muy similar al comando DCL COPY: si el nombre o tipo del archivo de salida se especificó explícitamente, entonces no se propagan marcas de tiempo, pero si se tomaron implícitamente de la especificación del archivo de entrada, entonces todas las marcas de tiempo que no sean la revisión la fecha se propaga. Si no se proporciona este parámetro, el valor predeterminado es 0.

rmscopy es específico de VMS y no se puede exportar; debe ser referenciado por su nombre completo, por ejemplo:

File::Copy::rmscopy($from,$to)ordie$!;

Igual que copy, rmscopy devuelve 1 en caso de éxito. Si ocurre un error, establece $!, elimina el archivo de salida y devuelve 0.

REGRESO

Todas las funciones devuelven 1 en caso de éxito, 0 en caso de error. PS se establecerá si se encuentra un error.

NOTAS

Antes de llamar a copy () o move () en un identificador de archivo, la persona que llama debe cerrar o vaciar () el archivo para evitar que se pierdan las escrituras. Tenga en cuenta que este es el caso incluso para move (), porque en realidad puede copiar el archivo, dependiendo de la implementación específica del sistema operativo y del sistema de archivos subyacente.

AUTOR

Archivo :: La copia fue escrita por Aaron Sherman <[email protected]> en 1995 y actualizado por Charles Bailey <[email protected]> en 1996.