Estructura SHFILEOPSTRUCTA (shellapi.h)
Contiene información que la función SHFileOperation usa para realizar operaciones de archivo.
Sintaxis
typedef struct _SHFILEOPSTRUCTA {
HWND hwnd;
UINT wFunc;
PCZZSTR pFrom;
PCZZSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
PCSTR lpszProgressTitle;
} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
Miembros
hwnd
Tipo: HWND
Identificador de ventana en el cuadro de diálogo para mostrar información sobre el estado de la operación de archivo.
wFunc
Tipo: UINT
Valor que indica la operación que se va a realizar. Uno de los siguientes valores:
FO_COPY
Copie los archivos especificados en el miembro pFrom en la ubicación especificada en el miembro pTo .
FO_DELETE
Elimine los archivos especificados en pFrom.
FO_MOVE
Mueva los archivos especificados en pFrom a la ubicación especificada en pTo.
FO_RENAME
Cambie el nombre del archivo especificado en pFrom. No puede usar esta marca para cambiar el nombre de varios archivos con una sola llamada de función. Use FO_MOVE en su lugar.
pFrom
Tipo: PCZZTSTR
Los caracteres comodín ms-DOS estándar, como "*", solo se permiten en la posición del nombre de archivo. El uso de un carácter comodín en otra parte de la cadena provocará resultados impredecibles.
Aunque este miembro se declara como una sola cadena terminada en null, en realidad es un búfer que puede contener varios nombres de archivo delimitados por null. Cada nombre de archivo finaliza con un solo carácter NULL . El nombre de archivo finalizó con un carácter NULL doble ("\0\0") para indicar el final del búfer.
pTo
Tipo: PCZZTSTR
Al igual que pFrom, el miembro pTo también es una cadena terminada en doble null y se controla de la misma manera. Sin embargo, pTo debe cumplir las siguientes especificaciones:
- No se admite el uso de caracteres comodín.
- Las operaciones copiar y mover pueden especificar directorios de destino que no existen. En esos casos, el sistema intenta crearlos y, normalmente, muestra un cuadro de diálogo para preguntar al usuario si desea crear el nuevo directorio. Para suprimir este cuadro de diálogo y hacer que los directorios se creen de forma silenciosa, establezca la marca FOF_NOCONFIRMMKDIR en fFlags.
- En el caso de las operaciones copiar y mover, el búfer puede contener varios nombres de archivo de destino si el miembro fFlags especifica FOF_MULTIDESTFILES.
- Empaqueta varios nombres en la cadena pTo de la misma manera que para pFrom.
- Use rutas de acceso completas. El uso de rutas de acceso relativas no está prohibido, pero puede tener resultados impredecibles.
fFlags
Tipo: FILEOP_FLAGS
Marcas que controlan la operación de archivo. Este miembro puede tomar una combinación de las marcas siguientes.
FOF_ALLOWUNDO
Conserve la información de deshacer, si es posible.
Antes de Windows Vista, las operaciones solo se podían deshacer desde el mismo proceso que realizó la operación original.
En Windows Vista y sistemas posteriores, el ámbito de la deshacer es una sesión de usuario. Cualquier proceso que se ejecute en la sesión de usuario puede deshacer otra operación. El estado de deshacer se mantiene en el proceso de Explorer.exe y, siempre que se ejecute ese proceso, puede coordinar las funciones de deshacer.
Si el parámetro de archivo de origen no contiene nombres de archivo y ruta de acceso completos, se omite esta marca.
FOF_CONFIRMMOUSE
No se usa.
FOF_FILESONLY
Realice la operación solo en archivos (no en carpetas) si se especifica un nombre de archivo comodín (.).
FOF_MULTIDESTFILES
El miembro pTo especifica varios archivos de destino (uno para cada archivo de origen en pFrom) en lugar de un directorio donde se van a depositar todos los archivos de origen.
FOF_NOCONFIRMATION
Responda con Sí a Todo para cualquier cuadro de diálogo que se muestre.
FOF_NOCONFIRMMKDIR
No pida al usuario que confirme la creación de un nuevo directorio si la operación requiere que se cree una.
FOF_NO_CONNECTED_ELEMENTS
Versión 5.0. No mueva archivos conectados como un grupo. Mueva solo los archivos especificados.
FOF_NOCOPYSECURITYATTRIBS
Versión 4.71. No copie los atributos de seguridad del archivo. El archivo de destino recibe los atributos de seguridad de su nueva carpeta.
FOF_NOERRORUI
No muestre un cuadro de diálogo al usuario si se produce un error.
FOF_NORECURSEREPARSE
No se usa.
FOF_NORECURSION
Realice solo la operación en el directorio local. No funcione de forma recursiva en subdirectorios, que es el comportamiento predeterminado.
FOF_NO_UI
Windows Vista. Realice la operación de forma silenciosa, sin presentar ninguna interfaz de usuario al usuario. Esto equivale a FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR.
FOF_RENAMEONCOLLISION
Asigne al archivo un nombre nuevo en una operación de traslado, copia o cambio de nombre si ya existe un archivo con el nombre de destino en el destino.
FOF_SILENT
No mostrar un cuadro de diálogo de progreso.
FOF_SIMPLEPROGRESS
Mostrar un cuadro de diálogo de progreso, pero no mostrar nombres de archivo individuales mientras están operados.
FOF_WANTMAPPINGHANDLE
Si se especifica FOF_RENAMEONCOLLISION y se cambia el nombre de los archivos, asigne un objeto de asignación de nombres que contenga sus nombres antiguos y nuevos al miembro hNameMappings . Este objeto debe liberarse mediante SHFreeNameMappings cuando ya no sea necesario.
FOF_WANTNUKEWARNING
Versión 5.0. Envíe una advertencia si un archivo se destruye permanentemente durante una operación de eliminación en lugar de reciclarse. Esta marca invalida parcialmente FOF_NOCONFIRMATION.
fAnyOperationsAborted
Tipo: BOOL
Cuando se devuelve la función, este miembro contiene TRUE si se anuló alguna operación de archivo antes de que se completaran; de lo contrario, FALSE. El usuario puede anular manualmente una operación a través de la interfaz de usuario o el sistema puede anularla de forma silenciosa si se establecieron las marcas de FOF_NOERRORUI o FOF_NOCONFIRMATION.
hNameMappings
Tipo: LPVOID
Cuando se devuelve la función, este miembro contiene un identificador de un objeto de asignación de nombres que contiene los nombres antiguos y nuevos de los archivos cuyo nombre ha cambiado. Este miembro solo se usa si el miembro fFlags incluye la marca FOF_WANTMAPPINGHANDLE . Consulte Comentarios para obtener más detalles.
lpszProgressTitle
Tipo: PCTSTR
Puntero al título de un cuadro de diálogo de progreso. Se trata de una cadena terminada en NULL. Este miembro solo se usa si fFlags incluye la marca FOF_SIMPLEPROGRESS .
Comentarios
// WRONG
LPTSTR pszSource = L"C:\\Windows\\*";
// RIGHT
LPTSTR pszSource = L"C:\\Windows\\*\0";
Para tener en cuenta los dos caracteres NULOs de terminación, asegúrese de crear búferes lo suficientemente grandes como para contener MAX_PATH (que normalmente incluye el carácter NULO de terminación único) más 1.
No se puede sobreestado que las rutas de acceso siempre deben ser rutas de acceso completas. Si los miembros pFrom o pTo no son nombres completos, los directorios actuales se toman de la unidad actual global y la configuración del directorio, tal y como administran las funciones GetCurrentDirectory y SetCurrentDirectory .
Si no proporciona una ruta de acceso completa, los siguientes hechos se vuelven pertinentes:
- La falta de una ruta de acceso antes de un nombre de archivo no indica a SHFileOperation que este archivo reside en la raíz del directorio actual.
- SHFileOperation no usa la variable de entorno PATH para determinar una ruta de acceso válida.
- No se puede confiar en SHFileOperation para usar el directorio que es el directorio actual cuando comienza a ejecutarse. El directorio que se ve como el directorio actual está en todo el proceso y se puede cambiar de otro subproceso mientras se ejecuta la operación. Si eso fuera a suceder, los resultados de SHFileOperation serían impredecibles.
Si pFrom se establece en un nombre de archivo sin una ruta de acceso completa, al eliminar el archivo con FO_DELETE no se mueve a la Papelera de reciclaje, aunque se establezca la marca FOF_ALLOWUNDO . Debe proporcionar una ruta de acceso completa para eliminar el archivo en la Papelera de reciclaje.
Se produce un error en SHFileOperation en cualquier ruta de acceso con el prefijo "\?".
Hay dos versiones de esta estructura, una versión ANSI (SHFILEOPSTRUCTA) y una versión Unicode (SHFILEOPSTRUCTW). La versión Unicode es idéntica a la versión ANSI, salvo que se usan cadenas de caracteres anchos (LPCWSTR) en lugar de cadenas de caracteres ANSI (LPCSTR). En Windows 98 y versiones anteriores, solo se admite la versión ANSI. En Microsoft Windows NT 4.0 y versiones posteriores, se admiten las versiones ANSI y Unicode de esta estructura. SHFILEOPSTRUCTW y SHFILEOPTSTRUCTA nunca deben utilizarse directamente; la estructura adecuada se vuelve a definir como SHFILEOPSTRUCT por el precompilador en función de si la aplicación se compila para ANSI o Unicode.
SHNAMEMAPPING tiene versiones ANSI y Unicode similares. En el caso de las aplicaciones ANSI, hNameMappings apunta a un valor int seguido de una matriz de estructuras SHNAMEMAPPING anSI. En el caso de las aplicaciones Unicode, hNameMappings apunta a un valor int seguido de una matriz de estructuras SHNAMEMAPPING de Unicode. Sin embargo, en Microsoft Windows NT 4.0 y versiones posteriores, SHFileOperationsiempre devuelve un identificador a un conjunto Unicode de estructuras SHNAMEMAPPING . Si quiere que las aplicaciones funcionen con todas las versiones de Windows, la aplicación debe emplear código condicional para tratar las asignaciones de nombres. Por ejemplo:
x = SHFileOperation(&shop);
if (fWin9x)
HandleAnsiNameMappings(shop.hNameMappings);
else
HandleUnicodeNameMappings(shop.hNameMappings);
Trate hNameMappings como puntero a una estructura cuyos miembros son un valor UINT seguido de un puntero a una matriz de estructuras SHNAMEMAPPING , como se muestra en su declaración:
struct HANDLETOMAPPINGS
{
UINT uNumberOfMappings; // Number of mappings in the array.
LPSHNAMEMAPPING lpSHNameMapping; // Pointer to the array of mappings.
};
El valor UINT indica el número de estructuras SHNAMEMAPPING de la matriz. Cada estructura SHNAMEMAPPING contiene la ruta de acceso antigua y nueva para uno de los archivos cuyo nombre ha cambiado.
Nota:
El encabezado shellapi.h define SHFILEOPSTRUCT como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Encabezado | shellapi.h |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de