Después de de nuestra extensa selección de datos hemos podido solucionar esta contrariedad que pueden tener muchos de nuestros lectores. Te ofrecemos la solución y deseamos serte de mucha apoyo.
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 alcp
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 shellcp(1)
haría, mientrascopy
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 elcp
alias paracopy
. - 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 simplecopy
rutina, que no conserva el sistema operativo específico attributes. Para los sistemas VMS, esto llamarmscopy
rutina (ver más abajo). Para los sistemas OS / 2, esto llama alsyscopy
XSUB directamente. Para los sistemas Win32, esto llamaWin32::CopyFile
.Comportamiento especial si
syscopy
está definido (OS / 2, VMS y Win32):Si ambos argumentos para
copy
no son identificadores de archivos, entoncescopy
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 paracopy
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 comoFile::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 dermscopy
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 pararmscopy
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.
No se te olvide dar recomendación a este tutorial si te fue útil.