OneDrive «Archivos bajo demanda» y las aplicaciones empresariales — las suposiciones que rompen los marcadores de posición, y cómo abordarlas
· Actualizado el: · Go Komura · OneDrive, Archivos bajo demanda, KFM, Windows, Aplicaciones empresariales, Almacenamiento en la nube, Sistema de archivos, Investigación de fallos, Sistemas de información
«Mi aplicación empresarial no puede leer el CSV guardado en el escritorio», «el proceso de importación que funcionaba hasta ahora falla con “Archivo no encontrado” tras cambiar de PC», «en el Explorador el archivo aparece, pero al abrirlo con la aplicación da error» — en los últimos años este tipo de consultas se ha vuelto habitual entre nuestros clientes.
Al investigar, en no pocos casos la causa no es un error de la aplicación, sino la «copia de seguridad automática de Escritorio y Documentos» de OneDrive (Traslado de carpetas conocidas, KFM) y los «Archivos bajo demanda». El contenido real del escritorio se ha trasladado a C:\Users\<nombre>\OneDrive\Escritorio, y parte de los archivos que allí se ven son «marcadores de posición» sin contenido real en local. Tanto los usuarios como el personal de informática siguen usando el PC sin darse cuenta de este cambio.
En otras palabras, la suposición implícita de las aplicaciones empresariales de que «el archivo está en el disco local» se ha sustituido, sin que nadie lo note, por la suposición de que «el archivo está en la nube y en local solo hay una apariencia». Este artículo, dirigido a responsables de sistemas de información de pequeñas y medianas empresas y a desarrolladores de aplicaciones Windows, organiza —basándose en fuentes primarias de Microsoft Learn— el funcionamiento de los marcadores de posición, la determinación del estado mediante atributos de archivo, las trampas típicas en las que caen las aplicaciones empresariales, las medidas tanto del lado del desarrollo como del de informática, y el procedimiento de diagnóstico al recibir una consulta de «no puedo leer el archivo».
flowchart TB
accTitle: Sustitución de la suposición implícita de las aplicaciones empresariales
accDescr: La suposición implícita de que el archivo está en el disco local se sustituye sin que nadie lo note por la suposición de que el contenido real está en la nube y en local solo hay una apariencia
before["Suposición implícita tradicional"] --> b1["Contenido real en el disco local"]
after["Suposición sustituida"] --> a1["El contenido real está en la nube"]
a1 --> a2["En local solo hay una apariencia"]
a2 -.-> note["Marcador de posición"]
Figura 1: La suposición de que “el contenido real está en local” se sustituye, sin que nadie lo note, por “el contenido real está en la nube, en local solo hay una apariencia”.
1. Conclusión inicial
- Escritorio, Documentos e Imágenes pueden haberse trasladado, mediante KFM, a
C:\Users\<nombre>\OneDrive\. Es fácil que se active durante la configuración inicial de un PC nuevo, y en las organizaciones también se puede aplicar de forma masiva mediante directiva. Las aplicaciones que asumen una ruta fija se rompen en este punto.1 - Los Archivos bajo demanda están activados de forma predeterminada en la aplicación de sincronización actual. Los archivos creados en otros dispositivos o en la Web aparecen como marcadores de posición «solo en línea», sin contenido real en local.23
- En realidad, un marcador de posición es un punto de reanálisis (reparse point) gestionado por Cloud Files API (el minifiltro cldflt.sys). Tanto para el Explorador como para la API de archivos aparece como un archivo normal, y al abrirlo se descarga automáticamente (hidratación).4
- El estado se puede determinar mediante los atributos del archivo. FILE_ATTRIBUTE_OFFLINE, RECALL_ON_DATA_ACCESS, PINNED, UNPINNED, entre otros, sirven de indicador, y con el comando attrib se ven como las letras O, P y U. Con solo comprobar los atributos no se produce ninguna descarga.567
- Los incidentes típicos en aplicaciones empresariales combinan «no se puede abrir», «lentitud», «detección incorrecta de atributos», «avalancha de eventos de supervisión» y «conflictos con la sincronización». Sin conexión o con OneDrive detenido, la hidratación falla, y el procesamiento por lotes provoca la descarga de todos los archivos.48
- La medida del lado de la aplicación consiste en «respetar el marcador de posición». Lo básico es determinar el estado por atributos al enumerar y no abrir el archivo sin necesidad, usar FILE_FLAG_OPEN_NO_RECALL cuando haga falta, y no colocar la carpeta de datos bajo OneDrive.910
- La medida del lado de informática consiste en «gestionar el fijado» y «controlar mediante directivas». Garantice el contenido real de las carpetas de trabajo con «Mantener siempre en este dispositivo» y configure KFM y los Archivos bajo demanda de forma deliberada mediante directiva de grupo/Intune. No olvide que el Sensor de almacenamiento también «devuelve a solo en línea los archivos que no se usan».1112
En una frase: «el archivo que se ve en el Explorador» y «el archivo cuyo contenido real está en el disco local» ya no son lo mismo.
2. Qué está ocurriendo — KFM y Archivos bajo demanda
2.1. El escritorio ya podría no ser C:\Users\<nombre>\Desktop
La aplicación de sincronización de OneDrive incluye una función llamada «Traslado de carpetas conocidas» (Known Folder Move, KFM). En la pantalla de configuración aparece como «Copia de seguridad» o «Hacer copia de seguridad de las carpetas importantes»; al activarla, el contenido real de Escritorio, Documentos e Imágenes se traslada (redirige) a la carpeta de OneDrive.1
| Ubicación visible para el usuario | Ruta real antes de KFM | Ruta real tras KFM |
|---|---|---|
| Escritorio | C:\Users\taro\Desktop |
C:\Users\taro\OneDrive\Escritorio |
| Documentos | C:\Users\taro\Documents |
C:\Users\taro\OneDrive\Documentos |
| Imágenes | C:\Users\taro\Pictures |
C:\Users\taro\OneDrive\Imágenes |
Al iniciar sesión con una cuenta Microsoft o una cuenta de trabajo durante la configuración inicial (OOBE) de un PC nuevo, se sugiere de forma predeterminada la copia de seguridad de carpetas, y si se continúa sin más, la configuración queda activada; esta situación está muy extendida. En las organizaciones, la directiva «Mover silenciosamente las carpetas conocidas de Windows a OneDrive» (KFMSilentOptIn) permite aplicarla de forma masiva sin preguntar nada al usuario.111
flowchart TB
accTitle: Dos vías por las que KFM se activa
accDescr: Al iniciar sesión durante la configuración inicial de un PC nuevo se sugiere la copia de seguridad de forma predeterminada y se activa si se continúa, mientras que en las organizaciones la directiva KFMSilentOptIn la aplica de forma masiva sin preguntar al usuario
oobe["Configuración inicial de un PC nuevo"] --> signin["Inicio de sesión con la cuenta"]
signin --> prompt["Se sugiere la copia de seguridad por defecto"]
prompt --> on1["Se activa si se continúa"]
org["Directiva de la organización"] --> silent["KFMSilentOptIn"]
silent --> on2["Aplicación masiva sin preguntar"]
on1 --> kfm["KFM activo"]
on2 --> kfm
Figura 2: KFM se activa sin que nadie lo note, ya sea por la sugerencia predeterminada de la configuración inicial o por la directiva de aplicación silenciosa de la organización.
Lo problemático es que el aspecto en el Explorador apenas cambia. La API de carpetas conocidas del shell (SHGetKnownFolderPath, o Environment.GetFolderPath en .NET) devuelve la ruta correcta después del traslado, así que las aplicaciones bien escritas siguen funcionando. Lo que se rompe son las aplicaciones que tienen incrustada una ruta fija como C:\Users\%USERNAME%\Desktop en un archivo de configuración o en el código. Este es el patrón típico por el que un proceso de importación falla con «Archivo no encontrado» tras cambiar de PC.
flowchart TB
accTitle: Cómo resuelve la aplicación la ruta después de KFM
accDescr: Tras el traslado del contenido real de carpetas como Escritorio a OneDrive mediante KFM, la aplicación que usa la API de carpetas conocidas obtiene la ruta correcta y sigue funcionando, pero la que tiene una ruta fija incrustada falla con archivo no encontrado
kfm["Activación de KFM"] --> move["El contenido real de Escritorio y otras se traslada a OneDrive"]
move --> how{"¿Cómo resuelve la ruta la app?"}
how -->|API de carpetas conocidas| ok["Obtiene la ruta correcta y sigue funcionando"]
how -->|Ruta fija incrustada| ng["Archivo no encontrado"]
Figura 3: Tras KFM, la aplicación que usa la API de carpetas conocidas sigue funcionando, pero la que tiene la ruta fija incrustada se rompe en este punto.
2.2. Archivos bajo demanda — se ven, pero no tienen contenido real
El otro protagonista es «Archivos bajo demanda» (Files On-Demand). En un entorno con esta función activada, todos los archivos de OneDrive se ven en el Explorador, pero su contenido no se descarga hasta que se abren. Esta función está activada de forma predeterminada en la aplicación de sincronización actual, y Microsoft recomienda mantenerla así.23
El estado se distingue por los iconos de estado del Explorador.13
| Icono | Estado | Contenido real en local |
|---|---|---|
| Nube | Solo en línea | No (solo marcador de posición) |
| Marca blanca sobre fondo blanco | Disponible en este dispositivo | Sí (pero puede liberarse automáticamente más tarde) |
| Marca blanca sobre fondo verde | Mantener siempre en este dispositivo (fijado) | Sí (excluido de la liberación automática) |
Lo importante aquí es el estado intermedio. Incluso un archivo que ya se abrió y tiene contenido real en local puede volver a solo en línea por la operación del usuario de «Liberar espacio» o por el Sensor de almacenamiento, del que hablaremos más adelante. Esta es una de las causas de esos fallos poco reproducibles del tipo «el mes pasado funcionaba».312
stateDiagram-v2
accTitle: Los 3 estados de los Archivos bajo demanda y sus transiciones
accDescr: Un archivo solo en línea pasa a estar disponible en el dispositivo al abrirse, pero puede volver a solo en línea por la operación de liberar espacio o por el Sensor de almacenamiento, y solo los archivos fijados quedan excluidos de la liberación automática
s1: Solo en línea(icono de nube)
s2: Disponible en este dispositivo
s3: Fijado(mantener siempre en este dispositivo)
s1 --> s2: Abrir(hidratación)
s2 --> s1: Liberar espacio
s2 --> s1: Sensor de almacenamiento
s1 --> s3: Mantener siempre en este dispositivo
s2 --> s3: Mantener siempre en este dispositivo
s3 --> s2: Quitar fijado
Figura 4: Los 3 estados de los Archivos bajo demanda. «Disponible en este dispositivo» puede volver automáticamente a solo en línea, pero el fijado queda excluido.
3. La verdadera naturaleza del marcador de posición — Cloud Files API y los puntos de reanálisis
Los Archivos bajo demanda están implementados sobre un mecanismo del sistema operativo llamado Cloud Files API (API de archivos en la nube), introducido en Windows 10 versión 1709. El componente que actúa a nivel del sistema de archivos es un minifiltro llamado cldflt.sys (nombre de servicio CldFlt, «Windows Cloud Files Filter Driver»), y OneDrive es uno de los «proveedores de sincronización» que usa esta API.47
Técnicamente, un marcador de posición es un punto de reanálisis (reparse point). En el sistema de archivos solo existen metadatos (unos 1 KB) como el nombre del archivo, el tamaño y las marcas de tiempo, sin los datos del contenido. Cuando una aplicación abre y lee el archivo, el minifiltro detecta la solicitud, ordena al proveedor de sincronización que transfiera los datos, y la lectura avanza solo después de esperar a que termine la descarga. A este proceso de traer los datos se le llama hidratación, y al proceso inverso —descartar el contenido real local y volver al marcador de posición— deshidratación.4
sequenceDiagram
accTitle: Hidratación al abrir un marcador de posición
accDescr: Cuando la aplicación abre y lee un marcador de posición, el minifiltro cldflt.sys detecta la solicitud, ordena al proveedor de sincronización que transfiera los datos, y la lectura avanza tras esperar a que termine la descarga
participant app as Aplicación empresarial
participant flt as Minifiltro cldflt.sys
participant sync as Proveedor de sincronización
app->>flt: Solicitud de apertura y lectura
flt->>sync: Ordena la transferencia de datos
sync-->>flt: Descarga completada
flt-->>app: La lectura avanza
Figura 5: La lectura de un marcador de posición avanza solo después de que el minifiltro haga que el proveedor de sincronización traiga los datos.
Al oír «punto de reanálisis», es natural preocuparse por la compatibilidad con código existente que «da un trato especial al detectar un punto de reanálisis», pero por motivos de compatibilidad, Cloud Files API oculta el hecho de que es un punto de reanálisis a todos los procesos excepto el motor de sincronización y los que están bajo %systemroot%. Desde una aplicación normal, se ve como «un archivo normal que tarda un poco más en abrirse». Esta transparencia tan completa es, precisamente, tanto la fuente de su comodidad como la causa de que «la aplicación rompa la suposición sin darse cuenta».4 El mecanismo de los puntos de reanálisis en sí se explica en «Estructura interna de NTFS».
flowchart TB
accTitle: Ocultación del punto de reanálisis y diferencias en cómo se percibe
accDescr: El marcador de posición es en realidad un punto de reanálisis, pero Cloud Files API lo oculta a los procesos que no son el motor de sincronización, de modo que una aplicación normal lo ve como un archivo normal que solo tarda un poco más en abrirse
ph["Marcador de posición(punto de reanálisis)"] --> who{"¿Qué proceso lo abre?"}
who -->|Motor de sincronización, etc.| raw["Se ve como punto de reanálisis"]
who -->|Otra aplicación| plain["Se ve como archivo normal"]
plain -.-> note["Solo parece tardar un poco más en abrirse"]
Figura 6: El hecho de ser un punto de reanálisis se oculta a todo lo que no sea el motor de sincronización, y para una aplicación normal parece un archivo normal.
Si se mira en las propiedades del Explorador, un marcador de posición tiene un aspecto característico: en «Tamaño» se muestra el tamaño real, pero «Tamaño en disco» es casi 0. Aquí no se sostiene la suposición de que «si tiene tamaño, debe tener contenido real».
flowchart TB
accTitle: Cómo se ven las propiedades de un marcador de posición
accDescr: En las propiedades del Explorador, un marcador de posición muestra el tamaño real en Tamaño pero un Tamaño en disco casi 0, por lo que no se sostiene la suposición de que si tiene tamaño debe tener contenido real
prop["Propiedades del marcador de posición"] --> size["Tamaño es el real"]
prop --> disk["Tamaño en disco es casi 0"]
size -.-> trap["Suposición de que debe tener contenido real"]
disk -.-> truth["No hay contenido real en local"]
Figura 7: Un marcador de posición muestra el tamaño real en «Tamaño», pero el «Tamaño en disco» es casi 0.
4. Los atributos de archivo revelan el estado
El estado de un marcador de posición se expone como atributos de archivo normales. Los principales son los siguientes.5
| Atributo | Valor | Significado |
|---|---|---|
| FILE_ATTRIBUTE_OFFLINE | 0x00001000 | Los datos no están disponibles de inmediato (atributo tradicional para gestión de almacenamiento jerárquico) |
| FILE_ATTRIBUTE_RECALL_ON_OPEN | 0x00040000 | No hay contenido físico real en local. Solo aparece en los resultados de enumeración de directorios |
| FILE_ATTRIBUTE_PINNED | 0x00080000 | El usuario ha indicado la intención de «mantenerlo siempre en local» (fijado) |
| FILE_ATTRIBUTE_UNPINNED | 0x00100000 | No hace falta mantener el contenido real en local (intención de convertirlo a solo en línea) |
| FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS | 0x00400000 | Parte o todo el contenido no está en local. Leerlo provoca la recuperación remota |
El comando attrib del símbolo del sistema puede mostrar y establecer estos atributos con una sola letra. O es el atributo sin conexión, P es fijado y U es no fijado.6 La correspondencia con los estados de los Archivos bajo demanda de OneDrive se organiza así en la documentación de Microsoft.7
| Estado de Archivos bajo demanda | Atributo | Comando de configuración |
|---|---|---|
| Siempre disponible (fijado) | Pinned (se muestra P) | attrib +p <ruta> |
| Disponible en este dispositivo | Ni P ni U | attrib -p <ruta> |
| Solo en línea | Unpinned (se muestra U) | attrib +u <ruta> |
Hay un detalle a tener en cuenta. El cambio de estado sigue un orden. Si se quiere pasar un archivo solo en línea (U) a «disponible en este dispositivo», ejecutar solo -p no basta: el atributo U permanece y el contenido real no se descarga. La propia documentación de Microsoft indica el procedimiento de establecer primero +p (siempre disponible) para descargar el contenido real, y después -p.7 En un script que deba cambiar de estado de forma fiable, es más seguro quitar también el atributo contrario a la vez, como en attrib +p -u.
flowchart TB
accTitle: Orden para pasar de solo en línea a disponible en este dispositivo
accDescr: Ejecutar solo attrib -p en un archivo solo en línea deja el atributo U y no descarga el contenido real, por lo que primero hace falta attrib +p para descargar el contenido y después -p
u["Solo en línea(U)"] -->|Solo attrib -p| stay["Sigue con U, sin contenido real"]
u -->|attrib +p| pin["Fijado(descarga el contenido real)"]
pin -->|attrib -p| local["Disponible en este dispositivo"]
Figura 8: Para cambiar desde solo en línea hace falta primero obtener el contenido real con +p y después aplicar -p.
A continuación, un ejemplo de determinación con PowerShell. Con solo consultar los atributos no se produce hidratación, así que se puede usar con confianza para investigaciones o comprobaciones por lotes.
function Test-CloudPlaceholder {
param([Parameter(Mandatory)][string]$Path)
$value = [int](Get-Item -LiteralPath $Path -Force).Attributes
[pscustomobject]@{
Path = $Path
Offline = ($value -band 0x00001000) -ne 0 # FILE_ATTRIBUTE_OFFLINE
RecallOnDataAccess = ($value -band 0x00400000) -ne 0 # No todo el contenido está en local
Pinned = ($value -band 0x00080000) -ne 0 # Mantener siempre en este dispositivo
Unpinned = ($value -band 0x00100000) -ne 0 # Solo en línea
}
}
# Comprueba en bloque los CSV de la carpeta Documentos (no se descarga el contenido).
# La ruta se resuelve con la API de carpetas conocidas. Si se escribe directamente el
# nombre visible "Documentos", en entornos con el nombre de carpeta real en inglés
# (Documents) o según la configuración de KFM, la ruta podría no existir
Get-ChildItem ([Environment]::GetFolderPath('MyDocuments')) -Recurse -Filter *.csv |
ForEach-Object { Test-CloudPlaceholder $_.FullName } |
Where-Object RecallOnDataAccess |
Format-Table -AutoSize
La conversión a [int] se debe a que el enumerador FileAttributes de .NET no define nombres como RECALL_ON_DATA_ACCESS. Si se evalúa el valor numérico con operaciones de bits, la determinación funciona sin problemas.
5. Trampas en las que caen las aplicaciones empresariales
A partir de aquí entramos en el tema central. La transparencia de los marcadores de posición es cómoda en el día a día, pero al combinarse con los patrones de procesamiento típicos de las aplicaciones empresariales, se manifiesta de las seis formas siguientes.
5.1. Al abrir se dispara la descarga automática — «no se puede abrir» sin conexión
Al abrir un archivo solo en línea, la hidratación empieza en el acto. Si está en línea y el archivo es pequeño, la velocidad es tal que no se nota, pero cuando OneDrive está detenido, con la sesión cerrada o en pausa, cuando la red falla, o cuando el archivo es grande, se convierte en «un archivo que existe pero no se puede abrir». El error puede devolverse con un código relacionado con archivos en la nube como ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING (0x8007016A, «El proveedor de archivos en la nube no se está ejecutando»), o puede observarse como un tiempo de espera agotado del lado de la aplicación.8
Lo más engañoso es que la comprobación de existencia equivalente a File.Exists(), así como la obtención de atributos y tamaño, tiene éxito. El resultado es un patrón de error inexplicable desde la lógica de un disco local: «la comprobación de existencia pasa, pero la lectura falla».
flowchart TB
accTitle: Bifurcación al acceder a un archivo solo en línea
accDescr: La comprobación de existencia y la obtención de atributos y tamaño tienen éxito, pero la lectura del contenido dispara la hidratación, que si OneDrive está en funcionamiento y la red está bien permite leer tras la descarga, y si no, falla con un error como 0x8007016A o un tiempo de espera agotado
check["Comprobación de existencia, atributos y tamaño"] --> ok1["Tiene éxito"]
open["Lectura del contenido"] --> hyd["Empieza la hidratación"]
hyd --> cond{"¿OneDrive en funcionamiento y red normal?"}
cond -->|Sí| read["Se puede leer tras la descarga"]
cond -->|No| err["Error como 0x8007016A o tiempo de espera agotado"]
Figura 9: La comprobación de existencia puede tener éxito y aun así fallar la lectura. El resultado depende del estado de OneDrive y de la red.
5.2. El procesamiento por lotes provoca la descarga de todos los archivos
Si se dirige a una carpeta bajo OneDrive un proceso por lotes que lee todos los archivos, un cálculo de hash, una búsqueda de texto completo o un proceso de copia de seguridad propio, se provoca la hidratación de todos los archivos tocados. En una carpeta de varios gigabytes, esto no solo hace que el proceso se vuelva anormalmente lento, sino que la descarga satura el disco, y en PC con poca capacidad la falta de espacio libre provoca otro fallo distinto. El espacio que se suponía ahorrado gracias a los Archivos bajo demanda desaparece con un solo escaneo completo.
Además, si una aplicación provoca la hidratación sin una acción explícita del usuario, Windows puede mostrar una notificación emergente que ofrece al usuario la opción de bloquearla. Si se bloquea aquí, esa aplicación seguirá fallando en las descargas a partir de ese momento (se puede revertir en «Descarga automática de archivos» de la configuración). Es una de las causas de que «la importación falle solo en un PC concreto».4
flowchart TB
accTitle: Cómo el procesamiento por lotes provoca la descarga de todos los archivos
accDescr: Un procesamiento por lotes bajo OneDrive provoca la hidratación de todos los archivos tocados, causando retraso en el proceso y saturación de disco, y si además el usuario bloquea la notificación emergente, la descarga sigue fallando en adelante
scan["Procesamiento por lotes bajo OneDrive"] --> touch["Hidrata todos los archivos tocados"]
touch --> cost["Retraso en el proceso y saturación de disco"]
touch --> toast["Puede aparecer una notificación emergente"]
toast --> block{"¿El usuario bloquea?"}
block -->|Sí| fail["La descarga sigue fallando en adelante"]
block -->|No| cont["La descarga continúa"]
Figura 10: El procesamiento por lotes provoca la hidratación de todos los archivos, y si se bloquea en la notificación emergente, los fallos continúan.
5.3. Mal funcionamiento del código que no contempla los atributos
El código que no conoce FILE_ATTRIBUTE_OFFLINE o RECALL_ON_DATA_ACCESS falla en lugares inesperados.
- Al determinar los atributos por igualdad exacta (por ejemplo,
attributes == FileAttributes.Archive), el marcador de posición se excluye o se trata como error por ser un «archivo inesperado» - La lógica de exclusión de herramientas de copia de seguridad o sincronización interpreta el atributo OFFLINE como «migrado a cinta» y lo omite (o, al contrario, recupera todos los archivos cuando debería excluirlos)
- La comprobación de solo lectura o la manipulación del bit de archivo rompen la combinación de atributos
flowchart TB
accTitle: Patrones de mal funcionamiento del código que no contempla los atributos
accDescr: El código que desconoce los atributos del marcador de posición falla de tres formas: excluye o marca como error mediante una comparación exacta de atributos, malinterpreta el atributo OFFLINE y omite el archivo o recupera todos, y rompe la combinación de atributos al manipularlos
code["Código que no contempla los atributos"] --> m1["Comparación exacta"]
code --> m2["Malinterpreta OFFLINE"]
code --> m3["Rompe la combinación al manipular atributos"]
m1 --> r1["Exclusión o error por inesperado"]
m2 --> r2["Omisión o recuperación total"]
Figura 11: El código que desconoce los atributos OFFLINE o RECALL falla mediante exclusión, omisión incorrecta o ruptura de atributos.
En su guía para desarrolladores de minifiltros, Microsoft indica explícitamente que no se deben emitir lecturas o escrituras descuidadas en archivos que tengan RECALL_ON_DATA_ACCESS. Aunque es un documento pensado para controladores en modo kernel, el principio de que «tocar el contenido de un archivo con este atributo implica un coste de recuperación» se aplica igualmente a las aplicaciones en modo usuario.10
5.4. Interacción entre FileSystemWatcher y la sincronización
Al supervisar con FileSystemWatcher una carpeta bajo OneDrive, llegan en gran cantidad no solo los eventos por las operaciones del usuario, sino también eventos generados por la actividad de la aplicación de sincronización. Cada vez que se sincroniza un cambio hecho en otro dispositivo, o cada vez que la hidratación o la deshidratación cambian los atributos o el tamaño, puede dispararse un evento Changed. Además, si el diseño consiste en supervisar, importar y volver a escribir el resultado en la misma carpeta, se forma un bucle de escritura → carga → actualización de atributos → nuevo evento, generando una «avalancha de notificaciones de cambio». El diseño para filtrar eventos y confirmar el contenido real se trató en la «Guía práctica de FileSystemWatcher», pero bajo OneDrive esa necesidad es todavía mayor.
flowchart TB
accTitle: Bucle de notificaciones de cambio por supervisión y reescritura
accDescr: Cuando la aplicación de supervisión importa el resultado de un evento de cambio y lo vuelve a escribir en la misma carpeta, la carga y la actualización de atributos de la aplicación de sincronización generan de nuevo un evento, formando un bucle de avalancha de notificaciones de cambio
ev["Evento de cambio"] --> proc["La app de supervisión importa"]
proc --> write["Reescribe en la misma carpeta"]
write --> up["La app de sincronización carga"]
up --> attr["Se actualizan atributos y tamaño"]
attr --> ev
sync["Sincronización de cambios de otro dispositivo"] -.-> ev
Figura 12: Al reescribir el resultado de la importación en la misma carpeta, la actividad de la aplicación de sincronización genera un bucle de nuevos eventos.
5.5. Conflictos de sincronización durante el bloqueo exclusivo y los archivos «copia»
Mientras una aplicación empresarial mantiene un archivo abierto con bloqueo exclusivo, la aplicación de sincronización no puede cargarlo ni actualizarlo. Si se coloca bajo OneDrive una aplicación que mantiene el bloqueo durante mucho tiempo (un .accdb de Access, un archivo de datos de formato propio, un archivo de registro, etc.), los errores de sincronización se vuelven habituales. Al contrario, si varios PC editan el mismo archivo, la aplicación de sincronización intenta conservar ambas versiones y genera copias en conflicto, como archivos duplicados con el nombre del PC o del tipo «— copia». Si el proceso de importación asume «una carpeta, un archivo», este duplicado provoca un mal funcionamiento. Para lo básico del diseño de bloqueos, consulte «Conocimientos básicos del control de exclusión en la integración de archivos».
flowchart TB
accTitle: Problemas de sincronización por bloqueo exclusivo y edición en varios PC
accDescr: Mientras la app mantiene el bloqueo exclusivo, la app de sincronización no puede actualizar y los errores de sincronización se vuelven habituales, y si varios PC editan el mismo archivo se generan copias en conflicto que rompen la suposición de una carpeta un archivo
lock["La app abre con bloqueo exclusivo"] --> nosync["No se sincroniza y los errores son habituales"]
multi["Varios PC editan el mismo archivo"] --> conflict["Se generan copias en conflicto"]
conflict --> dup["Duplicados con nombre de PC o «copia»"]
dup --> bad["Se rompe la suposición de una carpeta un archivo"]
Figura 13: El bloqueo exclusivo hace habituales los errores de sincronización, y la edición desde varios PC provoca fallos por copias en conflicto.
5.6. El antivirus y el indexador de búsqueda provocan la hidratación
No solo las aplicaciones empresariales leen el contenido de los archivos. Un análisis completo del antivirus o el indexador de búsqueda también provocan la hidratación si tocan el contenido de un marcador de posición. Microsoft Defender, entre otros, está implementado para omitir los archivos con el atributo RECALL_ON_DATA_ACCESS durante el análisis bajo demanda, pero esto es una decisión de cada producto y no todos los productos de seguridad ofrecen la misma consideración. Si aparecen síntomas como «la red y el disco se saturan cada vez que corre el análisis nocturno» o «los archivos que se habían puesto en solo en línea aparecen todos con contenido real a la mañana siguiente», sospeche de esta línea.14
flowchart TB
accTitle: Hidratación provocada por productos de seguridad e indexadores de búsqueda
accDescr: Cuando un análisis completo o un indexador de búsqueda tocan el contenido de un marcador de posición, los productos que respetan el atributo RECALL lo omiten, pero los que no lo hacen hidratan todos los archivos, saturando el ancho de banda por la noche y dejando todo con contenido real a la mañana siguiente
av["Análisis completo o indexador de búsqueda"] --> care{"¿Respeta el atributo RECALL?"}
care -->|Producto que lo respeta| skip["Omite el marcador de posición"]
care -->|Producto que no lo respeta| hyd["Toca el contenido y lo hidrata"]
hyd --> sym1["Ancho de banda y disco saturados por la noche"]
hyd --> sym2["Todos los archivos con contenido real a la mañana siguiente"]
Figura 14: Un análisis que no respeta los atributos provoca la hidratación de todos los archivos, y se manifiesta como carga nocturna o contenido real a la mañana siguiente.
6. Medidas del lado del desarrollo de aplicaciones — respetar el marcador de posición
La política básica como desarrollador es tratar el marcador de posición no como «un archivo roto», sino como «un archivo con un coste de recuperación».
- Determinar por atributos al enumerar y no abrir sin necesidad. En un escaneo de carpetas, primero compruebe con los atributos (la determinación del capítulo 4) si el archivo es solo en línea, y abra solo los que realmente necesiten su contenido. Procesos que «no son críticos si se omiten», como la recopilación de registros, el cálculo de hash o la generación de vistas previas, deberían tener la opción de omitir los marcadores de posición.
// Los valores no definidos en FileAttributes de .NET se definen numéricamente
const FileAttributes RecallOnDataAccess = (FileAttributes)0x00400000;
const FileAttributes RecallOnOpen = (FileAttributes)0x00040000;
static bool IsCloudPlaceholder(FileAttributes attributes) =>
(attributes & (RecallOnDataAccess | RecallOnOpen | FileAttributes.Offline)) != 0;
foreach (var file in new DirectoryInfo(watchFolder).EnumerateFiles("*.csv"))
{
if (IsCloudPlaceholder(file.Attributes))
{
log.Warn($"{file.Name} es solo en línea, se omite el procesamiento en esta pasada");
continue;
}
Import(file.FullName);
}
flowchart TB
accTitle: Determinar por atributos al enumerar antes de abrir
accDescr: En el escaneo de carpetas primero se comprueban los atributos al enumerar, y si es un marcador de posición se omite dejando un registro de advertencia, ejecutando la importación solo en los demás archivos, evitando así la hidratación innecesaria
enum["Comprobar atributos al enumerar"] --> ph{"¿Es marcador de posición?"}
ph -->|Sí| skip["Se omite y se deja un registro de advertencia"]
ph -->|No| imp["Se ejecuta la importación"]
skip -.-> note["Política de abrir solo lo que necesite su contenido"]
Figura 15: Determinar por atributos al enumerar y omitir los marcadores de posición sin abrirlos evita la hidratación innecesaria.
- Tenga en cuenta que FILE_FLAG_OPEN_NO_RECALL no es una garantía de “no descargar”. Al especificar este indicador en CreateFile, se expresa la intención de «no volver a escribir los datos obtenidos en el almacenamiento local, sino dejarlos en el lado remoto». Sin embargo, es únicamente un indicador para no fijar los datos obtenidos en local; si se lee el contenido, la transferencia de datos en sí se produce igualmente. Si lo que se quiere evitar es el consumo de ancho de banda o la latencia en sí, lo más seguro es conformarse con atributos, tamaño y marcas de tiempo, sin solicitar acceso de lectura (abrir con permiso de acceso 0, o usar los metadatos del resultado de la enumeración).9
flowchart TB
accTitle: Efecto y límites de FILE_FLAG_OPEN_NO_RECALL
accDescr: FILE_FLAG_OPEN_NO_RECALL es un indicador para no fijar en local los datos obtenidos, pero al leer el contenido la transferencia de datos se produce igualmente, así que si se quiere evitar la transferencia lo más seguro es conformarse con metadatos como los atributos
flag["Abrir con el indicador NO_RECALL"] --> read["Leer el contenido"]
read --> transfer["La transferencia de datos se produce"]
transfer --> nolocal["No se fija en local"]
meta["Conformarse con los metadatos"] --> safe["No hay transferencia, es lo más seguro"]
Figura 16: FILE_FLAG_OPEN_NO_RECALL solo evita fijar en local; si se quiere evitar la transferencia en sí, hay que conformarse con los metadatos.
- Muestre “está bajo OneDrive” en el mensaje de error. Con solo comprobar, al fallar la lectura, si la ruta afectada está bajo
%OneDrive%e incluirlo en el mensaje, se reduce drásticamente el tiempo de diagnóstico tanto en el sitio como en la mesa de ayuda. Lo ideal es que, al detectar un error relacionado con archivos en la nube como 0x8007016A, se indique al usuario que compruebe el estado de OneDrive. - No coloque la carpeta de datos de la aplicación bajo OneDrive. En un entorno con KFM, «Documentos» también está bajo OneDrive. Guarde la configuración, la base de datos y los archivos de trabajo de la aplicación en
%ProgramData%o%LocalAppData%, y no elija Escritorio ni Documentos como destino predeterminado de guardado o de carpeta de importación. El criterio sobre dónde colocar cada cosa está resumido en «Cómo elegir dónde guardar los datos de una aplicación Windows». - Defina de antemano el comportamiento cuando el usuario elige una ruta bajo OneDrive. Si la aplicación permite que el usuario elija el destino, incluya en las especificaciones desde el principio decisiones de diseño como mostrar una advertencia cuando la ruta elegida esté bajo OneDrive (bajo la ruta de las variables de entorno
OneDrive/OneDriveCommercial), o rechazar únicamente la colocación de archivos de bloqueo o de la base de datos allí.
7. Medidas del lado de informática — control mediante fijado y directivas
Desde la perspectiva de informática, en lugar de «desactivar por completo los Archivos bajo demanda», lo realista es una operación que garantice el contenido real solo donde el negocio lo necesite.
- Fije las carpetas que lee la aplicación empresarial. Elija «Mantener siempre en este dispositivo» con el botón derecho en el Explorador, o ejecute
attrib +p -u <carpeta> /s /den el script de preparación de equipos (se especifica también-upara garantizar el cambio a fijado incluso si hay mezclados archivos ya convertidos a solo en línea). Los archivos fijados tienen garantizado el contenido real en local y quedan excluidos de la conversión automática a solo en línea que se describe más adelante.72 - Configure KFM y los Archivos bajo demanda de forma deliberada, no dejando que se activen sin darse cuenta. Las principales directivas (directiva de grupo/Intune) son las siguientes.111
| Objetivo | Directiva (valor de registro) | Efecto |
|---|---|---|
| Control de los Archivos bajo demanda | Use OneDrive Files On-Demand (FilesOnDemandEnabled) | Activada, los usuarios nuevos son solo en línea por defecto. Desactivada, sincronización completa tradicional |
| Aplicación masiva de KFM | Silently move Windows known folders to OneDrive (KFMSilentOptIn) | Traslada Escritorio y otras carpetas sin intervención del usuario |
| Prohibición de KFM | Prevent users from moving their Windows known folders to OneDrive (KFMBlockOptIn) | Prohíbe el traslado de las carpetas conocidas |
| Prohibición de desactivar KFM | Prevent users from redirecting their Windows known folders to their PC (KFMBlockOptOut) | Prohíbe que el usuario lo desactive |
| Reducción de espacio de sitios de equipo | Convert synced team site files to online-only (DehydrateSyncedTeamSites) | Convierte los sitios de equipo sincronizados a solo en línea (tenga en cuenta que actúa en el sentido de eliminar el contenido real) |
- Entienda el comportamiento del Sensor de almacenamiento. El Sensor de almacenamiento (Storage Sense) tiene una función que devuelve automáticamente a solo en línea los archivos en la nube que no se han abierto en un número determinado de días, y ese número de días se puede configurar mediante la directiva (ConfigStorageSenseCloudContentDehydrationThreshold). El valor predeterminado es 0 (no se revierte automáticamente), pero si el usuario lo ha activado desde la pantalla de configuración, o si la organización lo ha configurado para equipos de poca capacidad, es un comportamiento normal que «un archivo que se pudo abrir hasta la semana pasada haya vuelto a mostrar el icono de nube». Los archivos fijados quedan excluidos, así que aquí también resulta eficaz la regla de «fijar las carpetas de trabajo».122
flowchart TB
accTitle: Bifurcación de la conversión automática a solo en línea por el Sensor de almacenamiento
accDescr: En la liberación automática del Sensor de almacenamiento, los archivos ya fijados quedan excluidos y mantienen el contenido real, mientras que los no fijados vuelven a solo en línea si no se han abierto en un número determinado de días
ss["Liberación automática del Sensor de almacenamiento"] --> pin{"¿Ya está fijado?"}
pin -->|Sí| stay["Excluido, mantiene el contenido real"]
pin -->|No| old{"¿No se ha abierto en X días?"}
old -->|Sí| dehyd["Vuelve a solo en línea"]
old -->|No| keep["Mantiene el contenido real"]
ss -.-> def["Con el valor predeterminado 0 no revierte automáticamente"]
Figura 17: El Sensor de almacenamiento devuelve a solo en línea los archivos que no se han abierto en X días, pero excluye los fijados.
- Desactive los Archivos bajo demanda solo tras estimar el impacto. Desactivar FilesOnDemandEnabled hace que la sincronización vuelva al modelo tradicional de descarga completa, pero dispara el consumo de disco y la carga de red de la sincronización inicial. Microsoft recomienda mantenerlo activado, y la desactivación debería considerarse una medida limitada, aplicada solo tras confirmar que «el volumen de datos del usuario afectado es pequeño» y «hay margen de disco».112
- Incorpórelo en el procedimiento de soporte. Si incluye el procedimiento de diagnóstico del siguiente capítulo en la plantilla de consultas de «no puedo leer un archivo del escritorio», la calidad de la respuesta se mantiene uniforme aunque cambie la persona a cargo.
8. Procedimiento de diagnóstico — al recibir una consulta de «no puedo leer el archivo»
Al recibir la consulta, compruebe en el siguiente orden.
| # | Qué comprobar | Método | Qué revela |
|---|---|---|---|
| 1 | Si la ruta está bajo OneDrive | Compruebe la raíz de sincronización con echo %OneDrive% y compárela con la ruta afectada. Verifique también la ruta real de «Escritorio» en la barra de direcciones del Explorador |
Si el problema involucra a KFM/OneDrive |
| 2 | El estado del archivo | Compruebe con attrib <ruta> si tiene U (solo en línea), P (fijado) u O. Consulte también el «Tamaño en disco» en las propiedades |
Si el contenido real está en local o es un marcador de posición |
| 3 | El estado de funcionamiento de OneDrive | El icono de la bandeja de tareas (sesión iniciada, en pausa, con error), Get-Process OneDrive |
Si es posible hidratar. 0x8007016A es típico de un OneDrive detenido o mal configurado8 |
| 4 | La red | El proxy interno, el ancho de banda, la accesibilidad al servicio de OneDrive | Si la descarga en sí es posible |
| 5 | El espacio libre en disco | El espacio libre del volumen afectado. Con poca capacidad, hay directivas que hacen que OneDrive bloquee la descarga | Otro factor de fallo de la hidratación |
| 6 | El registro del fallo | Anote el código de error de la aplicación y la hora, y compárelos con lo que muestra la aplicación de sincronización | Si el problema es de la aplicación o de OneDrive |
La solución provisional consiste en hacer clic con el botón derecho en la carpeta afectada y elegir «Mantener siempre en este dispositivo» (o ejecutar attrib +p /s /d). Con esto el contenido real queda completo en local y el trabajo puede reanudarse. A partir de ahí, como medida definitiva, determine si la causa esencial está en el capítulo 6 (lado de la aplicación) o en el capítulo 7 (lado de informática).
flowchart TB
accTitle: Del remedio provisional a la solución definitiva
accDescr: Como remedio provisional, fijar la carpeta afectada completa el contenido real en local y permite reanudar el trabajo, y a partir de ahí se determina si la causa esencial está del lado de la aplicación o de informática para avanzar hacia la solución definitiva
aid["Remedio provisional: fijar"] --> restore["El contenido real queda completo en local"]
restore --> resume["Se reanuda el trabajo"]
resume --> judge{"¿Cuál es la causa esencial?"}
judge -->|Lado de la aplicación| dev["Ir a las medidas del capítulo 6"]
judge -->|Lado de informática| ops["Ir a las medidas del capítulo 7"]
Figura 18: El remedio provisional fija el contenido en local para reanudar el trabajo, y la solución definitiva avanza según se determine si la causa está en la aplicación o en informática.
Dicho esto, si tras comprobar todo esto resulta que «la ruta no está bajo OneDrive» y «tampoco es un marcador de posición», pase a otras causas habituales de una familia distinta, como las carpetas compartidas o la longitud de la ruta. «Las trampas de las unidades de red y las rutas UNC» y «MAX_PATH y las trampas de rutas y nombres de archivo en Windows» son el mapa para continuar.
9. Resumen
- Con KFM, el contenido real de Escritorio, Documentos e Imágenes puede haberse trasladado a
C:\Users\<nombre>\OneDrive\. Las aplicaciones que asumen una ruta fija se rompen en este punto. Resolver con la API de carpetas conocidas es el primer paso. - Los Archivos bajo demanda están activados de forma predeterminada, y es normal que existan marcadores de posición sin contenido real en local. El marcador de posición es un punto de reanálisis de Cloud Files API (cldflt.sys), y al abrirlo se hidrata automáticamente.
- El estado se puede determinar mediante los atributos de archivo (OFFLINE / RECALL_ON_DATA_ACCESS / PINNED / UNPINNED), que con attrib se ven como O, P y U. Con solo comprobar los atributos no se produce descarga.
- Los incidentes en aplicaciones empresariales se manifiestan como fallo de hidratación sin conexión, descarga completa provocada por procesos por lotes, código que no contempla los atributos, interacción entre FileSystemWatcher y la sincronización, conflictos entre el bloqueo exclusivo y la sincronización, e hidratación provocada por productos de seguridad.
- Del lado de la aplicación, lo básico es «determinar por atributos y no abrir sin necesidad», «no colocar la carpeta de datos bajo OneDrive» e «indicar en el error que la ruta está bajo OneDrive».
- Del lado de informática, se construye el estado deseado mediante «el fijado de las carpetas de trabajo» y «el control por directiva de KFM, los Archivos bajo demanda y el Sensor de almacenamiento».
- El diagnóstico puede avanzar de forma sistemática en el orden: ruta → attrib → funcionamiento de OneDrive → red → espacio libre → registro.
La próxima vez que reciba la consulta «el archivo existe pero no se puede leer», empiece por preguntarse esto.
¿Ese archivo está realmente en el disco local? ¿O solo hay allí una apariencia de la nube?
Artículos relacionados
- Las profundidades de la E/S de Windows (5.ª parte) — Estructura interna de NTFS: entender el sistema de archivos desde la MFT
- Guía práctica de FileSystemWatcher - medidas contra pérdidas y duplicados
- Las trampas de las unidades de red y las rutas UNC — cómo tratar servidores de archivos (carpetas compartidas) en aplicaciones empresariales
- Conocimientos básicos del control de exclusión en la integración de archivos - buenas prácticas de bloqueo de archivos y adquisición atómica (claim)
- Cómo elegir dónde guardar los datos de una aplicación Windows — tabla de decisión SQLite / JSON / registro / Access
- MAX_PATH y las trampas de rutas y nombres de archivo en Windows — el límite de 260 caracteres, nombres reservados, puntos finales, mayúsculas y minúsculas
Áreas de consultoría relacionadas
En KomuraSoft LLC atendemos la investigación de fallos en aplicaciones empresariales relacionados con OneDrive y el almacenamiento en la nube, como «el proceso de importación que funcionaba deja de hacerlo tras cambiar de PC» o «solo en un PC concreto no se puede leer un archivo»; el diseño y la modificación de procesos de archivo y de supervisión que contemplen los marcadores de posición; y la revisión del diseño del destino de guardado en entornos con KFM y Archivos bajo demanda. Puede consultarnos incluso solo para el diagnóstico del fenómeno, sin ningún compromiso.
- Desarrollo de aplicaciones Windows
- Investigación de fallos y análisis de causas
- Consultoría técnica y revisión de diseño
- Contacto
Referencias
-
Microsoft Learn, Redirect and move Windows known folders to OneDrive. Sobre cómo KFM traslada Escritorio, Documentos e Imágenes a OneDrive, y las directivas de aviso, aplicación silenciosa, prohibición de desactivación y prohibición de traslado. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Recommended sync app configuration. Sobre el hecho de que los Archivos bajo demanda están activados de forma predeterminada y se recomienda mantenerlos así, y sobre cómo el Sensor de almacenamiento limpia los «archivos disponibles en el dispositivo no fijados». ↩ ↩2 ↩3 ↩4 ↩5
-
Soporte de Microsoft, Save disk space with OneDrive Files On-Demand for Windows. Sobre los 3 estados de los Archivos bajo demanda y las operaciones «Mantener siempre en este dispositivo» y «Liberar espacio». ↩ ↩2 ↩3
-
Microsoft Learn, Build a Cloud Sync Engine that Supports Placeholder Files. Sobre la visión general de la API de archivos en la nube, el hecho de que el marcador de posición solo tiene unos 1 KB de metadatos y se hidrata automáticamente al abrirse, la ocultación del punto de reanálisis a los procesos que no son el motor de sincronización ni están bajo %systemroot%, y la notificación emergente y el bloqueo ante la hidratación en segundo plano. ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Learn, File Attribute Constants. Sobre la definición y los valores de los atributos FILE_ATTRIBUTE_OFFLINE, RECALL_ON_OPEN, RECALL_ON_DATA_ACCESS, PINNED y UNPINNED. ↩ ↩2
-
Microsoft Learn, attrib. Sobre la sintaxis del comando attrib y los indicadores de atributo, incluidos O (sin conexión), P (fijado) y U (no fijado). ↩ ↩2
-
Microsoft Learn, Query and set Files On-Demand states in Windows. Sobre la comprobación del estado de los Archivos bajo demanda con attrib, su configuración mediante +p, -p y +u, y el servicio CldFlt. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Error 0x8007016a when copying files in OneDrive. Sobre el error 0x8007016A «The cloud file provider is not running», que se produce cuando OneDrive está mal configurado o detenido, y el procedimiento para resolverlo. ↩ ↩2 ↩3
-
Microsoft Learn, CreateFileW function (fileapi.h). Sobre el hecho de que FILE_FLAG_OPEN_NO_RECALL es un indicador que expresa que «los datos solicitados no deben transferirse de vuelta al almacenamiento local, sino permanecer en el lado remoto» (no impide la obtención de los datos en sí), y sobre la obtención de atributos mediante la apertura con permiso de acceso 0. ↩ ↩2
-
Microsoft Learn, Handling placeholders. Sobre la necesidad de establecer FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS en los marcadores de posición, y sobre cómo las lecturas o escrituras descuidadas en archivos con este atributo pueden provocar hidrataciones innecesarias o daños en los datos. ↩ ↩2
-
Microsoft Learn, IT Admins - Use OneDrive policies to control sync settings. Sobre las directivas para configurar la aplicación de sincronización de OneDrive mediante GPO/Intune, como FilesOnDemandEnabled, KFMSilentOptIn, KFMBlockOptIn, KFMBlockOptOut y DehydrateSyncedTeamSites. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Policy CSP - Storage. Sobre la capacidad del Sensor de almacenamiento de convertir a solo en línea los archivos en la nube que no se han abierto en un número determinado de días, el valor predeterminado 0 (no revierte automáticamente) y la configuración entre 0 y 365 días. ↩ ↩2 ↩3
-
Soporte de Microsoft, What do the OneDrive icons mean?. Sobre el significado de los iconos de estado que se muestran en el Explorador, como la nube o las marcas de verificación. ↩
-
Microsoft Learn, Plan for an Azure File Sync deployment. Sobre cómo el análisis antivirus puede provocar la recuperación de archivos con el atributo RECALL_ON_DATA_ACCESS, y sobre cómo Microsoft Defender y otros lo omiten durante el análisis bajo demanda. ↩
Artículos relacionados
Artículos recientes con las mismas etiquetas para profundizar en temas cercanos.
Cómo funciona la Instantánea de volúmenes (VSS) en la práctica — por qué es posible respaldar archivos en uso
¿Por qué el software de backup sí puede copiar un archivo en uso pese a la violación de uso compartido? Explicamos los roles de VSS, el c...
Buenas prácticas de multihilo en la práctica — Edición C — Programar con seguridad al estilo de la API Win32
En C con Win32 la norma es crear hilos con _beginthreadex, usar bloqueos SRW y variables de condición, Interlocked, y una parada con even...
Buenas prácticas de multithreading en la práctica — Edición C++: eliminando los accidentes desde la estructura con RAII y jthread
En C++, una condición de carrera es directamente comportamiento indefinido. Repasamos la trampa del destructor de std::thread, la parada ...
Buenas prácticas de multithreading en la práctica — Edición .NET: qué decidir antes de aumentar los hilos
Reglas de diseño en .NET/C# para evitar fallos y bloqueos intermitentes con hilos: usar Task en lugar de hilos propios, reducir el estado...
Guía práctica del almacén de certificados de Windows — ¿en el de usuario o en el de equipo?
¿En qué almacén debe colocarse un certificado de cliente, en el de usuario o en el del equipo? Esta guía repasa certmgr.msc y certlm.msc,...
Temas relacionados
Estas páginas sitúan el tema en un contexto más amplio de servicios y decisiones.
Temas técnicos de Windows
Portal sobre desarrollo de Windows, investigación de fallos y aprovechamiento de activos existentes.
Investigación de fallos y problemas prolongados
Fallos intermitentes, diagnóstico de comunicaciones, bloqueos prolongados y pruebas de rutas de error.
Servicios relacionados con este tema
El artículo está directamente relacionado con los siguientes servicios.
Desarrollo de aplicaciones para Windows
Aplicaciones empresariales, integración de dispositivos y herramientas de comunicación, de los requisitos al desarrollo.
Preguntas frecuentes
Preguntas habituales en las consultas sobre el tema del artículo.
- Mi aplicación empresarial no puede leer un CSV guardado en el escritorio y muestra «Archivo no encontrado». ¿Por qué ocurre esto?
- En muchos casos, la propia carpeta Escritorio se ha trasladado a C:\Users\<nombre de usuario>\OneDrive\Escritorio mediante la función «Traslado de carpetas conocidas» (KFM) de OneDrive, o bien el archivo se ha convertido en un marcador de posición solo en línea. Si la aplicación asume una ruta fija como C:\Users\<nombre de usuario>\Desktop, no podrá encontrar el archivo después del traslado. Incluso si la ruta es correcta, los archivos solo en línea pueden no abrirse cuando OneDrive está detenido o la red falla. Primero compruebe si la ruta afectada está bajo OneDrive, y use el comando attrib para ver si tiene la marca U (solo en línea). Como solución provisional, puede hacer clic con el botón derecho y elegir «Mantener siempre en este dispositivo» para asegurar el contenido en local.
- ¿Se puede determinar mediante programación si un archivo es solo en línea?
- Sí. Los marcadores de posición solo en línea llevan atributos como FILE_ATTRIBUTE_OFFLINE o FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS (0x00400000), por lo que examinar los atributos del archivo permite determinar el estado sin descargar el contenido. Obtener los atributos o enumerar una carpeta no provoca la hidratación (descarga). En .NET, algunos de estos valores no están definidos en FileAttributes, así que hay que convertirlos a entero y evaluarlos con operaciones de bits. Si de todos modos necesita abrir el archivo sin leer su contenido, existen mecanismos como FILE_FLAG_OPEN_NO_RECALL en CreateFile.
- ¿Desactivar los Archivos bajo demanda resuelve el problema?
- Considere la desactivación como último recurso. Al desactivarla, todos los archivos sincronizados se descargan en local, lo que aumenta considerablemente el consumo de disco y la carga de red de la sincronización inicial; Microsoft también recomienda mantenerla activada. En la práctica, es más flexible marcar como «Mantener siempre en este dispositivo» (fijar) únicamente las carpetas que lee la aplicación empresarial. De forma más radical y fiable, lo mejor es rediseñar la aplicación para que su carpeta de datos o de importación no quede bajo la gestión de OneDrive.
- Marqué un archivo como «Mantener siempre en este dispositivo», pero sin darme cuenta vuelve a mostrar el icono de nube. ¿Por qué?
- Primero compruebe con el comando attrib si el archivo realmente tiene la marca de fijado (atributo P). Los archivos fijados quedan excluidos de la conversión automática a solo en línea que realiza el Sensor de almacenamiento, pero un archivo «disponible en este dispositivo» que solo se abrió sin fijarlo puede volver a solo en línea tras un período determinado, según la configuración o la directiva del Sensor de almacenamiento. Además, la operación del propio usuario de «Liberar espacio» o la directiva que convierte los sitios de equipo en solo en línea (DehydrateSyncedTeamSites) también hacen que el icono vuelva a mostrar la nube. Para las carpetas que necesita imprescindiblemente en local por motivos de negocio, gestiónelas fijando la carpeta completa.
Perfil del autor
Página de presentación del autor del artículo.
Go Komura
Representante de KomuraSoft LLC
Especializado en desarrollo de software para Windows, consultoría técnica e investigación de fallos, sobre todo en proyectos con sistemas existentes y errores difíciles de reproducir.