Estructura SHFILEOPSTRUCTA (shellapi.h)
Contiene información que usa la función shFileOperation
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 del 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
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 de
Los caracteres comodín estándar MS-DOS, 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 imprevisibles.
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 mediante un único carácter NULL. El último nombre de archivo finaliza con un doble carácter NULL ("\0\0") para indicar el final del búfer.
pTo
Tipo: PCZZTSTR de
Al igual que pFrom, el miembro pTo también es una cadena terminada con doble null y se controla de la misma manera. Sin embargo, pTo debe cumplir las siguientes especificaciones:
- No se admiten 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 de 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 fFlags miembro especifica FOF_MULTIDESTFILES.
- Empaqueta varios nombres en la cadena de pTo de la misma manera que para pFrom.
- Use rutas de acceso completas. No se prohíbe el uso de rutas de acceso relativas, 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
Conservar la información de deshacer, si es posible.
Antes de Windows Vista, las operaciones solo se podían deshacer del 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 Todos los 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 opere 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 nuevo nombre en una operación de movimiento, 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
Muestra un cuadro de diálogo de progreso, pero no muestra nombres de archivo individuales cuando están operados.
FOF_WANTMAPPINGHANDLE
Si se especifica
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 de
Cuando se devuelve la función, este miembro contiene TRUE si se anularon las operaciones de archivo antes de que se completaran; De lo contrario, FALSE. El sistema puede anular manualmente una operación a través de la interfaz de usuario o anularla de forma silenciosa si se establecieron las marcas de FOF_NOERRORUI o FOF_NOCONFIRMATION.
hNameMappings
Tipo: LPVOID de
Cuando la función devuelve, este miembro contiene un identificador para 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 información.
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 de FOF_SIMPLEPROGRESS.
Observaciones
// 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 sobrestatar que las rutas de acceso siempre deben ser rutas de acceso completas. Si los miembros de pFrom o pTo son nombres no calificados, los directorios actuales se toman de la configuración de directorio y unidad actual global administradas por 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 que un nombre de archivo no indique que SHFileOperation que este archivo reside en la raíz del directorio actual.
- La variable de entorno PATH no la usa SHFileOperation para determinar una ruta de acceso válida.
- SHFileOperation no se puede confiar en usar el directorio que es el directorio actual cuando comienza a ejecutarse. El directorio visto como el directorio actual está en todo el proceso y se puede cambiar de otro subproceso mientras se ejecuta la operación. Si fuera así, los resultados de SHFileOperation serían impredecibles.
Si pFrom se establece en un nombre de archivo sin una ruta de acceso completa, eliminar el archivo con FO_DELETE no lo mueve a la Papelera de reciclaje, incluso si se establece la marca FOF_ALLOWUNDO. Debe proporcionar una ruta de acceso completa para eliminar el archivo en la Papelera de reciclaje.
SHFileOperation produce un error 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 las cadenas de caracteres anchos (LPCWSTR) se usan 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. Para las aplicaciones ANSI,
x = SHFileOperation(&shop);
if (fWin9x)
HandleAnsiNameMappings(shop.hNameMappings);
else
HandleUnicodeNameMappings(shop.hNameMappings);
Trate
struct HANDLETOMAPPINGS
{
UINT uNumberOfMappings; // Number of mappings in the array.
LPSHNAMEMAPPING lpSHNameMapping; // Pointer to the array of mappings.
};
El valor
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 Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows 2000 Server [solo aplicaciones de escritorio] |
encabezado de |
shellapi.h |