OneDrive «File su richiesta» e le applicazioni aziendali — le ipotesi che i segnaposto spezzano e come affrontarle
· Go Komura · OneDrive, File su richiesta, KFM, Windows, Applicazioni aziendali, Archiviazione cloud, File system, Risoluzione dei problemi, Sistemi informativi
«Un’app aziendale non legge un CSV salvato sul desktop.» «Un’importazione che funzionava fallisce con “file non trovato” dopo la sostituzione del PC.» «Esplora risorse mostra il file, ma aprirlo dall’app dà errore.» — Negli ultimi anni questo tipo di consultazione dai clienti è diventato un classico.
Quando si indaga, la causa spesso non è un bug dell’app ma il «backup automatico di Desktop e Documenti» di OneDrive (Known Folder Move, KFM) e «File su richiesta». Il vero Desktop è stato spostato in C:\Users\<nome>\OneDrive\Desktop, e parte dei file che si vedono lì sono «segnaposto» senza contenuto locale. Utenti e IT continuano a usare il PC senza accorgersi di questo cambiamento.
In altre parole, l’ipotesi implicita di un’app aziendale che «il file è sul disco locale» è stata, senza che nessuno lo decidesse, sostituita dall’ipotesi che «il file è nel cloud e in locale c’è solo l’apparenza». Destinato ai responsabili IT delle PMI e agli sviluppatori di app Windows, questo articolo organizza, dalle fonti primarie Microsoft Learn, come funzionano i segnaposto, come giudicare lo stato dagli attributi di file, le trappole tipiche in cui cade un’app aziendale, cosa possono fare lato sviluppo e lato IT, e una procedura di triage quando vi dicono «il file non si apre».
flowchart TB
accTitle: Sostituzione dell'ipotesi implicita di un'app aziendale
accDescr: L'ipotesi implicita di un'app aziendale che il file sia sul disco locale è stata, senza che nessuno lo decidesse, sostituita dall'ipotesi che il contenuto reale sia nel cloud e in locale ci sia solo l'apparenza
before["L'ipotesi implicita tradizionale"] --> b1["Contenuto reale sul disco locale"]
after["L'ipotesi sostituita"] --> a1["Il contenuto reale è nel cloud"]
a1 --> a2["In locale c'è solo l'apparenza"]
a2 -.-> note["Un segnaposto"]
Figura 1: L’ipotesi che «il contenuto reale è locale» è stata, senza che nessuno lo decidesse, sostituita da «il contenuto reale è nel cloud; in locale c’è solo l’apparenza».
1. Prima la conclusione
- Desktop, Documenti e Immagini possono essere stati spostati sotto
C:\Users\<nome>\OneDrive\dal KFM. Tende ad attivarsi nella configurazione iniziale di un PC nuovo, e un’organizzazione può anche applicarlo in massa per criterio. Un’app che presuppone un percorso fisso si rompe qui.1 - File su richiesta è attivo per impostazione predefinita nell’app di sincronizzazione attuale. I file creati su un altro dispositivo o sul Web appaiono come segnaposto «solo online» senza contenuto locale.23
- La vera identità di un segnaposto è un punto di analisi gestito dall’API Cloud Files (il minifiltro cldflt.sys). Sembra un file ordinario sia a Esplora risorse sia alle API di file, e aprirlo lo scarica (idrata) automaticamente.4
- Lo stato si giudica dagli attributi di file. FILE_ATTRIBUTE_OFFLINE, RECALL_ON_DATA_ACCESS, PINNED, UNPINNED e simili sono i marcatori, e attrib li mostra come lettere O, P e U. Controllare solo gli attributi non causa un download.567
- Gli incidenti tipici di un’app aziendale sono una combinazione di «non si apre», «lento», «attributi mal giudicati», «tempesta di eventi di sorveglianza» e «conflitto con la sincronizzazione». Offline o con OneDrive fermo l’idratazione fallisce, e un processo batch induce il download di ogni file.48
- La risposta lato app è «rispettare i segnaposto». Le basi sono giudicare dagli attributi in enumerazione e non aprire alla leggera, usare FILE_FLAG_OPEN_NO_RECALL se serve, e non mettere la cartella dati sotto OneDrive.910
- La risposta lato IT è «operare con i pin» e «controllare per criterio». Garantite il contenuto reale delle cartelle di lavoro con «Mantieni sempre su questo dispositivo» e configurate KFM e File su richiesta di proposito con Criteri di gruppo / Intune. Non dimenticate che Sensore memoria può anche «riportare i file inutilizzati a solo online».1112
In una frase: «un file visibile in Esplora risorse» e «un file che ha contenuto reale sul disco locale» non sono più la stessa cosa.
2. Che cosa sta succedendo — KFM e File su richiesta
2.1. Il Desktop potrebbe non essere più C:\Users\<nome>\Desktop
L’app di sincronizzazione OneDrive ha una funzione chiamata Known Folder Move (KFM). Nella schermata delle impostazioni appare come «Backup», «Esegui il backup delle cartelle importanti» e simili; quando è attiva, il vero Desktop, Documenti e Immagini vengono spostati (reindirizzati) sotto la cartella OneDrive.1
| Luogo che l’utente vede | Percorso reale prima del KFM | Percorso reale dopo il KFM |
|---|---|---|
| Desktop | C:\Users\taro\Desktop |
C:\Users\taro\OneDrive\Desktop |
| Documenti | C:\Users\taro\Documents |
C:\Users\taro\OneDrive\Documents |
| Immagini | C:\Users\taro\Pictures |
C:\Users\taro\OneDrive\Pictures |
Nella configurazione iniziale (OOBE) di un PC nuovo, l’accesso con un account Microsoft o di lavoro presenta ampiamente il backup delle cartelle come proposta predefinita, e proseguire così la attiva. Un’organizzazione può anche applicarlo in massa senza chiedere nulla all’utente, con il criterio «Sposta silenziosamente le cartelle note di Windows in OneDrive» (KFMSilentOptIn).111
flowchart TB
accTitle: Due percorsi con cui si attiva il KFM
accDescr: Accedere con un account nella configurazione iniziale di un PC nuovo presenta il backup delle cartelle come proposta predefinita e proseguire così lo attiva; in un'organizzazione il criterio KFMSilentOptIn lo applica in massa senza chiedere all'utente
oobe["Configurazione iniziale di un PC nuovo"] --> signin["Accesso con un account"]
signin --> prompt["Il backup è proposto per impostazione predefinita"]
prompt --> on1["Proseguire così lo attiva"]
org["Criterio dell'organizzazione"] --> silent["KFMSilentOptIn"]
silent --> on2["Applicato in massa senza chiedere"]
on1 --> kfm["KFM attivo"]
on2 --> kfm
Figura 2: Il KFM si attiva senza che nessuno se ne accorga, o per la proposta predefinita alla configurazione iniziale o per il criterio di applicazione silenziosa dell’organizzazione.
Il punto scomodo è che l’aspetto in Esplora risorse quasi non cambia. Le API delle cartelle note della shell (SHGetKnownFolderPath e Environment.GetFolderPath di .NET) restituiscono il percorso corretto dopo lo spostamento, quindi un’app ben educata continua a funzionare. Ciò che si rompe è un’app che incorpora un percorso fisso come C:\Users\%USERNAME%\Desktop in un file di impostazioni o nel codice. Lo schema tipico di un’importazione che fallisce con «file non trovato» dopo la sostituzione del PC è questo.
flowchart TB
accTitle: Come un'app risolve il percorso dopo il KFM
accDescr: Dopo che il KFM ha spostato il vero Desktop e cartelle simili sotto OneDrive, un'app che usa le API delle cartelle note continua a funzionare con il percorso corretto dopo lo spostamento, ma un'app che incorpora un percorso fisso fallisce con file non trovato
kfm["KFM attivato"] --> move["Il vero Desktop e simili passano sotto OneDrive"]
move --> how{"Come risolve l'app il percorso?"}
how -->|API delle cartelle note| ok["Ottiene il percorso corretto dopo lo spostamento e continua"]
how -->|Un percorso fisso cablato| ng["File non trovato"]
Figura 3: Dopo il KFM, un’app che usa le API delle cartelle note continua a funzionare, ma un’app che cablà un percorso fisso si rompe qui.
2.2. File su richiesta — visibili, ma senza contenuto reale
L’altra pista è File su richiesta. In un ambiente in cui è attivo, ogni file su OneDrive è visibile in Esplora risorse, ma il contenuto non viene scaricato finché il file non viene aperto. Questa funzione è attiva per impostazione predefinita nell’app di sincronizzazione attuale, e Microsoft raccomanda anche di lasciarla attiva.23
Lo stato si legge dalle icone di stato in Esplora risorse.13
| Icona | Stato | Contenuto locale |
|---|---|---|
| Segno nuvola | Solo online | Nessuno (solo segnaposto) |
| Spunta su sfondo bianco | Disponibile in locale | Presente (ma può poi essere liberato automaticamente) |
| Spunta bianca su sfondo verde | Mantieni sempre su questo dispositivo (fissato) | Presente (fuori dalla liberazione automatica) |
Quello importante qui è lo stato di mezzo. Un file aperto una volta e ora con contenuto locale può tornare solo online tramite l’azione «Libera spazio» dell’utente o tramite Sensore memoria, di cui si parla più avanti. È una causa di un guasto difficile da riprodurre del tipo «il mese scorso funzionava».312
stateDiagram-v2
accTitle: I tre stati di File su richiesta e le transizioni
accDescr: Un file solo online diventa disponibile in locale quando viene aperto, ma Libera spazio o Sensore memoria possono riportarlo a solo online, e solo un file fissato è fuori dalla liberazione automatica
s1: Solo online (segno nuvola)
s2: Disponibile in locale
s3: Fissato (Mantieni sempre su questo dispositivo)
s1 --> s2: Aprire (idratazione)
s2 --> s1: Libera spazio
s2 --> s1: Sensore memoria
s1 --> s3: Mantieni sempre su questo dispositivo
s2 --> s3: Mantieni sempre su questo dispositivo
s3 --> s2: Togliere il pin
Figura 4: I tre stati di File su richiesta. «Disponibile in locale» può tornare automaticamente a solo online; un pin è fuori da ciò.
3. La vera identità di un segnaposto — l’API Cloud Files e i punti di analisi
File su richiesta è implementato su un meccanismo di OS introdotto in Windows 10 versione 1709, l’API Cloud Files. L’unità di lavoro lato file system è un minifiltro di file system chiamato cldflt.sys (nome servizio CldFlt, «Windows Cloud Files Filter Driver»), e OneDrive è un «provider di sincronizzazione» che usa questa API.47
Un segnaposto è tecnicamente un punto di analisi (reparse point). Sul file system esistono solo metadati come nome, dimensione e timestamp (circa 1 KB); non ci sono dati di contenuto. Quando un’app apre il file e legge, il minifiltro rileva la richiesta, dice al provider di sincronizzazione di trasferire i dati, attende la fine del download e poi la lettura prosegue. Questo recupero si chiama idratazione; gettare il contenuto locale e tornare a un segnaposto si chiama disidratazione.4
sequenceDiagram
accTitle: Idratazione all'apertura di un segnaposto
accDescr: Quando un'app apre un segnaposto e legge, il minifiltro cldflt.sys rileva la richiesta, dice al provider di sincronizzazione di trasferire i dati, attende la fine del download e poi la lettura prosegue
participant app as App aziendale
participant flt as Minifiltro cldflt.sys
participant sync as Provider di sync
app->>flt: Richiesta di apertura e lettura
flt->>sync: Ordinare un trasferimento dati
sync-->>flt: Download completato
flt-->>app: La lettura prosegue
Figura 5: Una lettura di segnaposto prosegue dopo che il minifiltro ha fatto recuperare i dati dal provider di sincronizzazione.
Sentire «punto di analisi» fa temere la compatibilità con codice esistente che «tratta in modo speciale un punto di analisi se ne rileva uno», ma per compatibilità l’API Cloud Files nasconde il fatto che è un punto di analisi a tutti tranne il motore di sincronizzazione e i processi sotto %systemroot%. Da un’app ordinaria sembra «un file ordinario solo un po’ lento ad aprirsi». Quella trasparenza radicale è, insieme a essere comoda, anche il motivo per cui «l’app si vede spezzare le ipotesi senza accorgersene».4 Il meccanismo dei punti di analisi stessi è spiegato in «NTFS Internals».
flowchart TB
accTitle: Nascondere il punto di analisi e la differenza di aspetto
accDescr: La vera identità di un segnaposto è un punto di analisi, ma l'API Cloud Files lo nasconde ai processi diversi dal motore di sincronizzazione, quindi da un'app ordinaria sembra un file ordinario solo un po' lento ad aprirsi
ph["Segnaposto (punto di analisi)"] --> who{"Quale processo l'ha aperto?"}
who -->|Il motore di sync e simili| raw["Visibile come punto di analisi"]
who -->|Qualsiasi altra app| plain["Sembra un file ordinario"]
plain -.-> note["Sembra solo un po' lento ad aprirsi"]
Figura 6: Il fatto che è un punto di analisi è nascosto a tutti tranne il motore di sincronizzazione, e a un’app ordinaria sembra un file ordinario.
Nelle proprietà di Esplora risorse un segnaposto ha l’aspetto caratteristico che «Dimensione» mostra la dimensione originale, mentre «Dimensione su disco» è quasi 0. L’ipotesi che «ha una dimensione, quindi deve avere contenuto reale» qui non regge.
flowchart TB
accTitle: Come appare un segnaposto nelle proprietà
accDescr: Nelle proprietà di Esplora risorse un segnaposto mostra la dimensione originale come Dimensione mentre Dimensione su disco è quasi 0, quindi l'ipotesi che abbia una dimensione e debba quindi avere contenuto reale non regge
prop["Proprietà del segnaposto"] --> size["Dimensione è quella originale"]
prop --> disk["Dimensione su disco quasi 0"]
size -.-> trap["L'ipotesi che ci sia contenuto reale"]
disk -.-> truth["Non c'è contenuto locale"]
Figura 7: Un segnaposto mostra la dimensione originale come «Dimensione» mentre «Dimensione su disco» è quasi 0.
4. Gli attributi di file vi dicono lo stato
Lo stato del segnaposto è pubblicato come attributi di file ordinari. I principali sono i seguenti.5
| Attributo | Valore | Significato |
|---|---|---|
| FILE_ATTRIBUTE_OFFLINE | 0x00001000 | I dati non sono immediatamente disponibili (l’attributo tradizionale della gestione gerarchica dello storage) |
| FILE_ATTRIBUTE_RECALL_ON_OPEN | 0x00040000 | Non c’è contenuto locale fisico. Appare solo nei risultati di enumerazione delle directory |
| FILE_ATTRIBUTE_PINNED | 0x00080000 | L’utente intende «tenerlo sempre in locale» (fissato) |
| FILE_ATTRIBUTE_UNPINNED | 0x00100000 | Il contenuto locale non deve essere conservato (l’intento di renderlo solo online) |
| FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS | 0x00400000 | Parte o tutto il contenuto non è locale. Leggere causa un recupero dal remoto |
Il comando attrib del prompt dei comandi può visualizzare e impostare questi come una singola lettera. O è l’attributo offline, P è fissato, U è non fissato.6 La corrispondenza con lo stato di File su richiesta di OneDrive è organizzata nella documentazione Microsoft come segue.7
| Stato File su richiesta | Attributi | Comando per impostare |
|---|---|---|
| Sempre disponibile (fissato) | Pinned (si visualizza P) | attrib +p <path> |
| Disponibile in locale | Né P né U | attrib -p <path> |
| Solo online | Unpinned (si visualizza U) | attrib +u <path> |
Un avvertimento. Cambiare stato ha un ordine. Quando volete che un file solo online (U) diventi «disponibile in locale», eseguire solo -p lascia U impostata e il contenuto reale non viene recuperato. La documentazione Microsoft mostra anche la procedura di fare prima +p (sempre disponibile) per scaricare il contenuto reale e poi -p.7 In uno script che deve cambiare in modo affidabile uno stato esistente, è più sicuro cancellare l’attributo opposto nello stesso momento, come in attrib +p -u.
flowchart TB
accTitle: L'ordine per passare da solo online a disponibile in locale
accDescr: Eseguire solo attrib -p su un file solo online lascia l'attributo U e il contenuto reale non viene recuperato; serve la procedura di scaricare prima il contenuto reale con attrib +p e poi -p
u["Solo online (U)"] -->|solo attrib -p| stay["Resta U; il contenuto reale non viene recuperato"]
u -->|attrib +p| pin["Fissato (scaricare il contenuto reale)"]
pin -->|attrib -p| local["Disponibile in locale"]
Figura 8: Passare da solo online richiede l’ordine di recuperare prima il contenuto reale con +p e poi -p.
Un esempio di giudizio in PowerShell. Guardare solo gli attributi non causa idratazione, quindi potete usarlo con fiducia per indagini e controlli di massa.
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 # Non tutto il contenuto è locale
Pinned = ($value -band 0x00080000) -ne 0 # Mantieni sempre su questo dispositivo
Unpinned = ($value -band 0x00100000) -ne 0 # Solo online
}
}
# Controllo di massa dei CSV sotto la cartella Documenti (il contenuto non viene scaricato).
# Risolvete il percorso con l'API delle cartelle note. Cablare il nome visualizzato
# "Documents" può diventare un percorso inesistente a seconda del vero nome della cartella
# (Documents vs. un nome localizzato) e della configurazione KFM
Get-ChildItem ([Environment]::GetFolderPath('MyDocuments')) -Recurse -Filter *.csv |
ForEach-Object { Test-CloudPlaceholder $_.FullName } |
Where-Object RecallOnDataAccess |
Format-Table -AutoSize
Il cast a [int] è perché l’enumerazione FileAttributes di .NET non definisce nomi come RECALL_ON_DATA_ACCESS. Operazioni bit a bit sul valore numerico possono giudicare senza problemi.
5. Trappole in cui cade un’app aziendale
Questo è l’argomento principale. La trasparenza dei segnaposto è comoda per lo più, ma combinata con uno schema di elaborazione tipico di un’app aziendale affiora nelle sei forme seguenti.
5.1. Aprire avvia automaticamente un download — «non si apre» offline
Aprire un file solo online avvia l’idratazione sul posto. Online, con un file piccolo, è così veloce che non lo notate, ma quando OneDrive è fermo, disconnesso o in pausa, quando la rete è instabile o il file è grande, diventa «un file che esiste ma non si apre». L’errore può tornare come un codice della famiglia cloud-file come ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING (0x8007016A, “The cloud file provider is not running”), o essere osservato come timeout lato app.8
Un’ulteriore trappola è che un controllo di esistenza equivalente a File.Exists(), e l’ottenimento di attributi o dimensione, riescono. Ottenete uno schema di errore che l’intuizione del disco locale non sa spiegare: «il controllo di esistenza è passato, ma la lettura è fallita».
flowchart TB
accTitle: Diramazioni all'accesso a un file solo online
accDescr: Un controllo di esistenza e l'ottenimento di attributi e dimensione riescono, ma leggere il contenuto avvia l'idratazione; se OneDrive è in esecuzione e la rete è sana si può leggere dopo il download, altrimenti si fallisce con un errore come 0x8007016A o un timeout
check["Controllo di esistenza, o ottenimento di attributi o dimensione"] --> ok1["Riesce"]
open["Lettura del contenuto"] --> hyd["L'idratazione inizia"]
hyd --> cond{"OneDrive in esecuzione e rete sana?"}
cond -->|Sì| read["Leggibile dopo il download"]
cond -->|No| err["Un errore come 0x8007016A, o un timeout"]
Figura 9: Un controllo di esistenza può riuscire mentre una lettura fallisce. Il successo o il fallimento dipende da se OneDrive è in esecuzione e dalla rete.
5.2. Un processo batch induce il download di ogni file
Puntate un batch che legge ogni file in una cartella, un calcolo di hash, una ricerca full-text o un backup fatto in casa a un albero sotto OneDrive e viene indotta l’idratazione di ogni file che toccate. Per una cartella di diversi GB il processo diventa anormalmente lento, il download riempie anche il disco, e su un PC a bassa capacità la mancanza di spazio libero invita un altro guasto. La capacità che File su richiesta doveva risparmiare scompare in un’unica scansione completa.
Inoltre, se un’app causa idratazione senza un’azione esplicita dell’utente, Windows può mostrare un toast e dare all’utente la scelta di bloccare. Una volta bloccata, quell’app continua a far fallire i download in seguito (si può togliere con «Download automatici di file» in Impostazioni). È una causa di «l’importazione fallisce solo su un PC particolare».4
flowchart TB
accTitle: Come un batch induce il download di ogni file
accDescr: Un batch sotto OneDrive induce l'idratazione di ogni file che tocca, causando ritardo di elaborazione e pressione sul disco, e se l'utente blocca sul toast i download continuano a fallire in seguito
scan["Un batch sotto OneDrive"] --> touch["Idratare ogni file toccato"]
touch --> cost["Ritardo di elaborazione e pressione sul disco"]
touch --> toast["Può comparire un toast"]
toast --> block{"L'utente ha bloccato?"}
block -->|Sì| fail["I download falliscono in seguito"]
block -->|No| cont["Il download continua"]
Figura 10: Un batch induce l’idratazione di ogni file, e se viene bloccato sul toast i fallimenti continuano in seguito.
5.3. Comportamento errato del codice che non si aspetta gli attributi
Il codice che non conosce FILE_ATTRIBUTE_OFFLINE o RECALL_ON_DATA_ACCESS si comporta male in punti inattesi.
- Gli attributi sono testati per uguaglianza esatta (
attributes == FileAttributes.Archivee simili), quindi un segnaposto viene escluso o trattato come errore in quanto «file inatteso» - Una decisione di esclusione in uno strumento di backup o sync interpreta l’attributo OFFLINE come «già inviato su nastro» e salta (o, al contrario, recupera ogni file che avrebbe dovuto escludere)
- Un controllo di sola lettura o un’operazione sul bit di archivio spezza la combinazione di attributi
flowchart TB
accTitle: Schemi di comportamento errato del codice che non si aspetta gli attributi
accDescr: Il codice che non conosce gli attributi dei segnaposto si comporta male come esclusione o gestione errori da un test di uguaglianza esatta, salto o recupero completo da una cattiva interpretazione di OFFLINE, o spezzamento della combinazione di attributi
code["Codice che non si aspetta gli attributi"] --> m1["Test di uguaglianza esatta"]
code --> m2["Interpreta male OFFLINE"]
code --> m3["Un'operazione di attributo spezza la combinazione"]
m1 --> r1["Escluso o in errore come inatteso"]
m2 --> r2["Salto, o un recupero completo"]
Figura 11: Il codice che non conosce OFFLINE o gli attributi della famiglia RECALL si comporta male come esclusione, salto sbagliato o distruzione di attributi.
La guida Microsoft per gli sviluppatori di minifiltri afferma chiaramente che non si deve emettere una lettura o una scrittura sconsiderata verso un file che ha RECALL_ON_DATA_ACCESS. Il documento è rivolto ai driver kernel, ma il principio «toccare il contenuto di un file con questo attributo = si verifica un costo di recupero» vale tale e quale per un’app in modalità utente.10
5.4. Interazione tra FileSystemWatcher e la sincronizzazione
Sorvegliate una cartella sotto OneDrive con FileSystemWatcher e ottenete non solo le azioni dell’utente ma anche un gran numero di eventi dall’attività dell’app di sincronizzazione. Ogni volta che una modifica su un altro dispositivo viene sincronizzata, e ogni volta che idratazione o disidratazione cambiano attributi o dimensione, può scattare un evento Changed. Inoltre, un progetto che scrive il risultato di una sorveglianza-e-importazione nella stessa cartella diventa una «tempesta di notifiche di modifica» in un ciclo scrittura → upload → aggiornamento attributi → un altro evento. Il diradamento degli eventi e la progettazione di un controllo del contenuto reale sono trattati in «Una guida pratica a FileSystemWatcher», ma sotto OneDrive il bisogno è un gradino più alto.
flowchart TB
accTitle: Un ciclo di notifiche di modifica da sorveglianza e riscrittura
accDescr: Se un'app di sorveglianza che ha ricevuto un evento di modifica riscrive il risultato di importazione nella stessa cartella, l'upload e l'aggiornamento attributi dell'app di sync scatenano un altro evento, e diventa un ciclo — una tempesta di notifiche
ev["Evento di modifica"] --> proc["L'app di sorveglianza importa"]
proc --> write["Riscrittura nella stessa cartella"]
write --> up["L'app di sync carica"]
up --> attr["Attributi o dimensione vengono aggiornati"]
attr --> ev
sync["Sync di una modifica da un altro dispositivo"] -.-> ev
Figura 12: Riscrivere il risultato di importazione nella stessa cartella diventa un ciclo in cui l’attività dell’app di sincronizzazione produce un altro evento.
5.5. Conflitti di sincronizzazione durante un blocco esclusivo e file «Copia»
Mentre un’app aziendale ha un file aperto con un blocco esclusivo, l’app di sincronizzazione non può né caricare né aggiornare quel file. Mettere un’app a blocco tenuto a lungo (un Access .accdb, un file dati in un formato fatto in casa, un file di log e simili) sotto OneDrive rende gli errori di sincronizzazione lo stato normale. Al contrario, quando lo stesso file è modificato su più PC, l’app di sincronizzazione cerca di tenere entrambe le edizioni e produce un file duplicato con un nome PC o una copia di conflitto come «— copia». Un’importazione che presuppone «una cartella, un file» si comporta male su questo duplicato. Per le basi della progettazione dei lock, si veda «Fondamenti di mutua esclusione per integrazione basata su file».
flowchart TB
accTitle: Problemi di sync causati da un blocco esclusivo e da modifiche su più PC
accDescr: Mentre un'app ha un file aperto con un blocco esclusivo l'app di sync non può aggiornare e gli errori di sync diventano lo stato normale; modificare lo stesso file su più PC produce una copia di conflitto e l'ipotesi una-cartella-un-file crolla
lock["L'app apre con un blocco esclusivo"] --> nosync["Impossibile sincronizzare; gli errori diventano normali"]
multi["Lo stesso file è modificato su più PC"] --> conflict["Viene prodotta una copia di conflitto"]
conflict --> dup["Un duplicato con nome PC o copia"]
dup --> bad["L'ipotesi una-cartella-un-file crolla"]
Figura 13: Un blocco esclusivo rende gli errori di sincronizzazione lo stato normale, e le modifiche su più PC invitano un comportamento errato da una copia di conflitto.
5.6. Antivirus e l’indicizzatore di ricerca inducono l’idratazione
Non è solo l’app aziendale a leggere il contenuto dei file. Una scansione completa del software antivirus e l’indicizzatore di ricerca inducono anche l’idratazione se toccano il contenuto di un segnaposto. Microsoft Defender e prodotti simili saltano i file che hanno l’attributo RECALL_ON_DATA_ACCESS in fase di scansione su richiesta, ma è una risposta lato prodotto, e non potete presupporre che ogni prodotto di sicurezza mostri la stessa cura. Se vedete sintomi come «rete e disco saturi ogni notte all’ora della scansione» o «file che dovevano essere solo online si sono tutti materializzati entro mattina», sospettate questa linea.14
flowchart TB
accTitle: Idratazione indotta da un prodotto di sicurezza o dall'indicizzatore di ricerca
accDescr: Quando una scansione completa o l'indicizzatore di ricerca toccano il contenuto di un segnaposto, un prodotto che rispetta l'attributo RECALL salta, ma un prodotto che non lo fa idrata ogni file e causa pressione di banda notturna o materializzazione mattutina
av["Una scansione completa o l'indicizzatore di ricerca"] --> care{"Rispetta l'attributo RECALL?"}
care -->|Un prodotto che lo rispetta| skip["Salta il segnaposto"]
care -->|Un prodotto che non lo fa| hyd["Tocca il contenuto e idrata"]
hyd --> sym1["Banda e disco saturi di notte"]
hyd --> sym2["Entro mattina i file si sono tutti materializzati"]
Figura 14: Una scansione che non rispetta l’attributo induce l’idratazione di ogni file e appare come carico notturno o materializzazione mattutina.
6. Risposta dello sviluppo app — rispettare i segnaposto
La politica di base come sviluppatori è trattare un segnaposto non come «un file rotto» ma come «un file che ha un costo di recupero».
- Giudicate dagli attributi in enumerazione e non aprite alla leggera. In una scansione di cartella, confermate prima dagli attributi (il giudizio del capitolo 4) se è solo online, e aprite solo i file di cui vi serve il contenuto. Date all’elaborazione «non fatale se manca» — raccolta log, calcolo hash, generazione anteprima — l’opzione di saltare i segnaposto.
// Definire come numeri i valori che FileAttributes in .NET non definisce
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} è solo online; questa volta si salta");
continue;
}
Import(file.FullName);
}
flowchart TB
accTitle: Il percorso di giudicare dagli attributi in enumerazione e poi aprire
accDescr: In una scansione di cartella, confermate prima gli attributi in enumerazione; se è un segnaposto, saltate e lasciate un log di avviso, ed eseguite l'importazione solo sugli altri file, così da evitare un'idratazione sconsiderata
enum["Confermare gli attributi in enumerazione"] --> ph{"Segnaposto?"}
ph -->|Sì| skip["Saltare e lasciare un log di avviso"]
ph -->|No| imp["Eseguire l'importazione"]
skip -.-> note["La politica di aprire solo i file di cui serve il contenuto"]
Figura 15: Giudicate dagli attributi in enumerazione e saltate un segnaposto senza aprirlo, così da evitare un’idratazione sconsiderata.
- Notate che FILE_FLAG_OPEN_NO_RECALL non è una garanzia di «non scaricare». Specificare questo flag su CreateFile può indicare l’intento che «i dati ottenuti devono restare sul lato remoto e non essere riscritti nello storage locale». È però un flag solo per non rendere residenti in locale i dati ottenuti; se leggete il contenuto, il trasferimento dati stesso avviene comunque. Se volete evitare banda e latenza stesse, finite con attributi, dimensione e timestamp soli — non richiedete accesso in lettura (aprite con diritti di accesso 0, usate i metadati dal risultato di enumerazione). È il più sicuro.9
flowchart TB
accTitle: Effetto e limiti di FILE_FLAG_OPEN_NO_RECALL
accDescr: FILE_FLAG_OPEN_NO_RECALL è un flag per non rendere residenti in locale i dati ottenuti; se leggete il contenuto il trasferimento dati stesso avviene comunque, quindi se volete evitare il trasferimento il più sicuro è finire con metadati come gli attributi
flag["Aprire con il flag NO_RECALL"] --> read["Leggere il contenuto"]
read --> transfer["Avviene un trasferimento dati"]
transfer --> nolocal["Non diventa residente in locale"]
meta["Finire con i soli metadati"] --> safe["Nessun trasferimento; il più sicuro"]
Figura 16: FILE_FLAG_OPEN_NO_RECALL evita solo di diventare residente in locale; se volete evitare il trasferimento stesso, finite con i soli metadati.
- Mettete «questo è sotto OneDrive» nel messaggio di errore. In un fallimento di lettura, solo confermare se il percorso di destinazione è sotto
%OneDrive%e includerlo nel messaggio riduce molto il tempo di triage per campo e help desk. Se rilevate un errore della famiglia cloud-file come 0x8007016A, l’ideale è dire all’utente «controllate lo stato di OneDrive». - Non mettete la cartella dati dell’app sotto OneDrive. In un ambiente KFM anche «Documenti» è sotto OneDrive. Mettete impostazioni, database e file di lavoro dell’app in
%ProgramData%o%LocalAppData%, e non scegliete Desktop o Documenti come percorso di salvataggio predefinito o cartella di importazione predefinita. Come decidere cosa mettere dove è riassunto in «How to Choose Where a Windows App Stores Local Data». - Decidete il comportamento quando l’utente sceglie una posizione sotto OneDrive. Per un’app che lascia scegliere all’utente un percorso di salvataggio, includete in anticipo nella specifica una decisione di progetto come avvisare quando il percorso scelto è sotto OneDrive (sotto il percorso delle variabili d’ambiente
OneDrive/OneDriveCommercial), o rifiutare solo il posizionamento di un file di lock o di un DB.
7. Risposta lato IT — controllare con pin e criteri
Dalla posizione IT, l’esercizio realistico non è «disattivare del tutto File su richiesta» ma garantire il contenuto reale solo dove il lavoro ne ha bisogno.
- Fissate le cartelle che un’app aziendale legge. Scegliete «Mantieni sempre su questo dispositivo» dal menu contestuale di Esplora risorse, o eseguite
attrib +p -u <folder> /s /dda uno script di imaging (specificate-unello stesso momento così che un misto di file già solo online venga cambiato in modo affidabile a fissato). Un file fissato ha il contenuto reale garantito in locale ed è anche fuori dalla conversione automatica a solo online di cui si parla più avanti.72 - Configurate KFM e File su richiesta «di proposito», non «era attivo quando ce ne siamo accorti». I criteri principali (Criteri di gruppo / Intune) sono i seguenti.111
| Scopo | Criterio (valore di registro) | Effetto |
|---|---|---|
| Controllo di File su richiesta | Use OneDrive Files On-Demand (FilesOnDemandEnabled) | On: i nuovi utenti sono per impostazione predefinita solo online. Off: sincronizzazione completa classica |
| Applicazione di massa del KFM | Silently move Windows known folders to OneDrive (KFMSilentOptIn) | Spostare Desktop e simili senza un’azione dell’utente |
| Vietare il KFM | Prevent users from moving their Windows known folders to OneDrive (KFMBlockOptIn) | Vietare lo spostamento delle cartelle note |
| Vietare di disattivare il KFM | Prevent users from redirecting their Windows known folders to their PC (KFMBlockOptOut) | Vietare all’utente di disattivarlo |
| Ridurre la capacità dei siti del team | Convert synced team site files to online-only (DehydrateSyncedTeamSites) | Rendere solo online i siti del team sincronizzati (notare che agisce nella direzione della scomparsa del contenuto reale) |
- Sapete come si muove Sensore memoria. Sensore memoria ha una funzione che riporta automaticamente a solo online i file cloud non aperti da un certo numero di giorni, e potete configurare i giorni con il criterio (ConfigStorageSenseCloudContentDehydrationThreshold). Il valore predefinito è 0 (non riportare automaticamente), ma se un utente l’ha attivato dalla schermata delle impostazioni, o l’organizzazione l’ha configurato per dispositivi a bassa capacità, «un file aperto la settimana scorsa è tornato a un’icona nuvola» avviene come comportamento normale. Un file fissato è fuori ambito, quindi «fissare le cartelle di lavoro» funziona anche qui.122
flowchart TB
accTitle: Diramazioni della conversione automatica a solo online di Sensore memoria
accDescr: Nella liberazione automatica di Sensore memoria, un file fissato è fuori ambito e il contenuto reale viene conservato; un file non fissato non aperto da un certo numero di giorni viene riportato a solo online
ss["Liberazione automatica di Sensore memoria"] --> pin{"Fissato?"}
pin -->|Sì| stay["Fuori ambito; il contenuto reale è conservato"]
pin -->|No| old{"Non aperto da un certo numero di giorni?"}
old -->|Sì| dehyd["Riportato a solo online"]
old -->|No| keep["Il contenuto reale è conservato"]
ss -.-> def["Il valore predefinito 0 non riporta automaticamente"]
Figura 17: Sensore memoria riporta a solo online un file non aperto da un certo numero di giorni, ma un pin è fuori ambito.
- Stimate l’impatto prima di disattivare File su richiesta. Disattivare FilesOnDemandEnabled diventa una sincronizzazione classica a download completo, ma il consumo disco e il carico di banda della prima sincronizzazione saltano. Microsoft raccomanda di lasciarla attiva, e dovreste trattare la disattivazione come misura limitata dopo aver confermato che «il volume di dati degli utenti di destinazione è piccolo» e «c’è margine di disco».112
- Inseritelo nella procedura di supporto. Mettere la procedura di triage del capitolo successivo nel modello di richiesta «un file sul desktop non si apre» mantiene la qualità della risposta anche quando cambia chi la gestisce.
8. Procedura di triage — quando vi dicono «il file non si apre»
Quando prendete la consultazione, confermate dall’alto in basso.
| # | Cosa confermare | Come | Cosa imparate |
|---|---|---|---|
| 1 | Il percorso è sotto OneDrive? | Confermate la radice di sync con echo %OneDrive% e confrontatela con il percorso di destinazione. Confermate anche il percorso reale di «Desktop» nella barra degli indirizzi di Esplora risorse |
Se KFM / OneDrive è coinvolto |
| 2 | Lo stato del file | Confermate U (solo online), P (fissato) e O con attrib <path>. Guardate anche «Dimensione su disco» nelle proprietà |
Se il contenuto reale è locale, o è un segnaposto |
| 3 | Se OneDrive è in esecuzione | L’icona della barra delle applicazioni (connesso, in pausa, errore), Get-Process OneDrive |
Se l’idratazione è possibile. 0x8007016A è tipicamente fermo o mal configurato8 |
| 4 | La rete | Proxy aziendale, banda, raggiungibilità del servizio OneDrive | Se il download stesso è possibile |
| 5 | Spazio disco libero | Spazio libero sul volume di destinazione. A bassa capacità c’è anche un criterio con cui OneDrive blocca i download | Un altro fattore di fallimento dell’idratazione |
| 6 | Un record del fallimento | Annotate il codice di errore dell’app e l’ora, e confrontateli con la visualizzazione errori dell’app di sync | Se è un problema lato app o lato OneDrive |
Il ripiego è fare clic con il pulsante destro sulla cartella di destinazione e scegliere «Mantieni sempre su questo dispositivo» (o attrib +p /s /d). Questo allinea il contenuto reale in locale e il lavoro può riprendere. Sopra, decidete se la causa essenziale è lato app (capitolo 6) o lato IT (capitolo 7) come risposta permanente.
flowchart TB
accTitle: Il percorso da un ripiego a una risposta permanente
accDescr: Come ripiego, impostare la cartella di destinazione su Mantieni sempre su questo dispositivo allinea il contenuto reale in locale così che il lavoro possa riprendere; sopra decidete se la causa essenziale è lato app o lato IT e passate a una risposta permanente
aid["Fissare come ripiego"] --> restore["Il contenuto reale è allineato in locale"]
restore --> resume["Il lavoro riprende"]
resume --> judge{"Dov'è la causa essenziale?"}
judge -->|Lato app| dev["Alla risposta del capitolo 6"]
judge -->|Lato IT| ops["Alla risposta del capitolo 7"]
Figura 18: Il ripiego è fissare, allineare il contenuto reale e riprendere il lavoro; la risposta permanente procede dopo aver deciso se è il lato app o il lato IT.
Se avete confermato fin qui e «il percorso non è sotto OneDrive» e «non è nemmeno un segnaposto», passate ad altre cause classiche come una cartella condivisa o la lunghezza del percorso. «Pitfalls of Network Drives and UNC Paths» e «MAX_PATH and Windows Path/Filename Pitfalls» sono la mappa per ciò che segue.
9. Riepilogo
- Il KFM può aver spostato il vero Desktop, Documenti e Immagini sotto
C:\Users\<nome>\OneDrive\. Un’app che presuppone un percorso fisso si rompe qui. Risolvere con le API delle cartelle note è il primo passo. - File su richiesta è attivo per impostazione predefinita, e i segnaposto senza contenuto locale esistono come cosa ovvia. Un segnaposto è un punto di analisi dell’API Cloud Files (cldflt.sys), e aprirlo lo idrata automaticamente.
- Lo stato si giudica dagli attributi di file (OFFLINE / RECALL_ON_DATA_ACCESS / PINNED / UNPINNED) e appare come O, P e U in attrib. Controllare solo gli attributi non causa un download.
- Gli incidenti delle app aziendali appaiono come fallimento di idratazione offline, download completo da un batch, codice che non si aspetta gli attributi, interazione tra FileSystemWatcher e sync, conflitto tra un blocco esclusivo e la sync, e idratazione indotta da un prodotto di sicurezza.
- Lato app, le basi sono «giudicare dagli attributi e non aprire alla leggera», «non mettere la cartella dati sotto OneDrive» e «dire che è sotto OneDrive quando segnalate un errore».
- Lato IT, create lo stato voluto con «il fissaggio delle cartelle di lavoro» e «il controllo per criterio di KFM, File su richiesta e Sensore memoria».
- Il triage si può percorrere in modo meccanico nell’ordine percorso → attrib → OneDrive in esecuzione → rete → spazio libero → record.
La prossima volta che vi dicono «il file c’è ma non si apre», chiedete prima questo.
Quel file è davvero sul disco locale? O c’è seduta lì solo l’apparenza del cloud?
Articoli correlati
- The Depths of Windows I/O (Part 5) — NTFS Internals: Understanding the File System Through the MFT
- Una guida pratica a FileSystemWatcher: gestire gli eventi persi e duplicati
- Pitfalls of Network Drives and UNC Paths — Working With File Servers (Shared Folders) From a Business Application
- Fondamenti di mutua esclusione per integrazione basata su file - Best practice per lock file e claim atomici
- How to Choose Where a Windows App Stores Local Data — A Decision Table for SQLite / JSON / Registry / Access
- MAX_PATH and Windows Path/Filename Pitfalls — the 260-Character Limit, Reserved Names, Trailing Dots, and Case Sensitivity
Aree di consulenza correlate
KomuraSoft LLC gestisce l’indagine dei guasti di app aziendali che coinvolgono OneDrive e l’archiviazione cloud — «un’importazione che funzionava non funziona più dopo la sostituzione del PC», «un file non si apre solo su un PC particolare» —, la progettazione e la correzione dell’elaborazione file e della sorveglianza che presuppongono i segnaposto, e le revisioni della progettazione del percorso di salvataggio in un ambiente KFM / File su richiesta. Iniziare isolando il sintomo va bene — non esitate a contattarci.
- Sviluppo di applicazioni Windows
- Analisi dei bug e delle cause
- Consulenza tecnica e revisione del progetto
- Contattaci
Riferimenti
-
Microsoft Learn, Redirect and move Windows known folders to OneDrive. Che il KFM sposta Desktop, Documenti e Immagini sotto OneDrive, e i criteri di proposta, applicazione silenziosa, divieto di disattivazione e divieto di spostamento. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Recommended sync app configuration. Che File su richiesta è attivo per impostazione predefinita e lasciarlo attivo è raccomandato, e che Sensore memoria pulisce i «file disponibili in locale che non sono fissati». ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Support, Save disk space with OneDrive Files On-Demand for Windows. I tre stati di File su richiesta e le azioni «Mantieni sempre su questo dispositivo» e «Libera spazio». ↩ ↩2 ↩3
-
Microsoft Learn, Build a Cloud Sync Engine that Supports Placeholder Files. Una panoramica dell’API Cloud Files, che un segnaposto tiene solo circa 1 KB di metadati e aprirlo lo idrata automaticamente, che il punto di analisi è nascosto ai processi diversi dal motore di sincronizzazione e da quelli sotto %systemroot%, e il toast e il blocco per l’idratazione in background. ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Learn, File Attribute Constants. Le definizioni e i valori di FILE_ATTRIBUTE_OFFLINE, RECALL_ON_OPEN, RECALL_ON_DATA_ACCESS, PINNED e UNPINNED. ↩ ↩2
-
Microsoft Learn, attrib. La sintassi del comando attrib e i flag di attributo tra cui O (offline), P (fissato) e U (non fissato). ↩ ↩2
-
Microsoft Learn, Query and set Files On-Demand states in Windows. Confermare lo stato di File su richiesta con attrib e impostarlo con +p, -p e +u, e il servizio CldFlt. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Error 0x8007016a when copying files in OneDrive. Che l’errore 0x8007016A “The cloud file provider is not running” si verifica quando OneDrive è mal configurato o fermo, e i passi di risoluzione. ↩ ↩2 ↩3
-
Microsoft Learn, CreateFileW function (fileapi.h). Che FILE_FLAG_OPEN_NO_RECALL è un flag che indica che «i dati richiesti devono restare sul lato remoto e non essere ritrasferiti allo storage locale» (non impedisce di ottenere i dati stessi), e l’ottenimento degli attributi aprendo con diritti di accesso 0. ↩ ↩2
-
Microsoft Learn, Handling placeholders. Che un segnaposto deve avere FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS, e che una lettura o una scrittura sconsiderata verso un file con questo attributo invita un’idratazione inutile o una corruzione dei dati. ↩ ↩2
-
Microsoft Learn, IT Admins - Use OneDrive policies to control sync settings. I criteri per configurare l’app di sincronizzazione OneDrive con GPO/Intune, tra cui FilesOnDemandEnabled, KFMSilentOptIn, KFMBlockOptIn, KFMBlockOptOut e DehydrateSyncedTeamSites. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Policy CSP - Storage. Che Sensore memoria può rendere solo online i file cloud non aperti da un certo numero di giorni, il valore predefinito 0 (non riportare automaticamente) e la configurazione da 0 a 365 giorni. ↩ ↩2 ↩3
-
Microsoft Support, What do the OneDrive icons mean?. Il significato delle icone di stato mostrate in Esplora risorse, come la nuvola e le spunte. ↩
-
Microsoft Learn, Plan for an Azure File Sync deployment. Che una scansione antivirus può causare il recall di un file con l’attributo RECALL_ON_DATA_ACCESS, e che Microsoft Defender e prodotti simili saltano i file con questo attributo in fase di scansione su richiesta. ↩
Articoli correlati
Articoli recenti con gli stessi tag per approfondire argomenti vicini.
App che si rompono alla ripresa dalla sospensione — Come funzionano gli eventi di alimentazione di Windows e come costruire app aziendali che li sopravvivono
Aprite il portatile e le connessioni dell'app aziendale sono morte — la causa è un progetto che non ha mai tenuto conto della sospensione...
DllMain e il loader lock — Il vero motivo per cui vi dicono di «non fare niente nell'inizializzazione della DLL»
Perché non dovete chiamare LoadLibrary o sincronizzarvi con altri thread da DllMain. A partire dalle fonti primarie, l'articolo spiega co...
Che cos'è davvero «Non risponde» — Come Windows decide che un'app è bloccata, e come progettare app che non lo sono
Il «Non risponde» di Windows è un meccanismo in cui il sistema operativo giudica che una finestra non ha prelevato un messaggio per 5 sec...
Sveglie spurie — Perché le condition variable si svegliano «senza essere notificate» e come attendere correttamente su Windows
L'attesa di una condition variable può ritornare anche quando non è arrivata nessuna notifica (una sveglia spuria). L'articolo spiega, a ...
WPR/WPA in pratica — Introduzione all'indagine delle prestazioni a livello di sistema per «tutto il PC è lento»
I problemi di prestazioni come «tutto il PC è lento» o «l'avvio è lento» che il Task Manager non riesce a seguire si indagano catturando ...
Argomenti correlati
Queste pagine collocano l’argomento in un contesto più ampio di servizi e decisioni.
Argomenti tecnici Windows
Portale su sviluppo Windows, analisi dei problemi e valorizzazione delle risorse esistenti.
Servizi collegati all’argomento
L’articolo è direttamente collegato ai servizi seguenti.
Sviluppo di applicazioni Windows
Applicazioni aziendali, integrazione di dispositivi e strumenti di comunicazione, dai requisiti allo sviluppo.
Domande frequenti
Domande che ricorrono nelle consulenze sull’argomento dell’articolo.
- Un'app aziendale dice «file non trovato» e non legge un CSV sul desktop. Perché?
- In molti casi la cartella Desktop stessa è stata spostata sotto C:\Users\<nome utente>\OneDrive\Desktop dal Known Folder Move (KFM) di OneDrive, oppure il file è diventato un segnaposto solo online. Un'app che presuppone un percorso fisso come C:\Users\<nome utente>\Desktop non trova il file dopo lo spostamento. Anche se il percorso è corretto, un file solo online può non aprirsi quando OneDrive è fermo o la rete è instabile. Prima confermate se il percorso di destinazione è sotto OneDrive e controllate con attrib se è impostata U (solo online). Come ripiego, potete assicurare il contenuto reale in locale con «Mantieni sempre su questo dispositivo» dal menu contestuale.
- Un programma può capire se un file è solo online?
- Sì. Un segnaposto solo online porta attributi come FILE_ATTRIBUTE_OFFLINE e FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS (0x00400000), quindi potete giudicare lo stato dagli attributi senza scaricare il contenuto. Ottenere gli attributi o enumerare una cartella non causa idratazione (download). In .NET alcuni valori non sono definiti su FileAttributes: si converte in intero e si verifica con operazioni bit a bit. Se dovete davvero aprire senza leggere il contenuto, è disponibile anche un mezzo come FILE_FLAG_OPEN_NO_RECALL di CreateFile.
- Disattivare File su richiesta risolve il problema?
- Trattate la disattivazione come ultima risorsa. Disattivarla scarica in locale ogni file nell'ambito di sincronizzazione, quindi capacità disco e carico di rete della prima sincronizzazione diventano grandi; Microsoft raccomanda anche di lasciarla attiva. In pratica è più flessibile impostare solo le cartelle che un'app aziendale legge su «Mantieni sempre su questo dispositivo» (fissarle). Più fondamentalmente, la correzione affidabile è riprogettare in modo che la cartella dati e quella di importazione dell'app non stiano sotto la gestione di OneDrive.
- Ho impostato «Mantieni sempre su questo dispositivo», ma alcuni file tornano all'icona nuvola. Perché?
- Prima confermate con attrib che il file abbia davvero il pin (attributo P). Un file fissato è fuori dalla conversione automatica a solo online di Sensore memoria, ma un file solo «disponibile in locale» perché qualcuno l'ha aperto, senza pin, può tornare solo online dopo un periodo a seconda delle impostazioni e dei criteri di Sensore memoria. L'azione «Libera spazio» dell'utente e un criterio che rende solo online i file dei siti del team (DehydrateSyncedTeamSites) riportano anche l'icona nuvola. Per le cartelle che devono restare locali per il lavoro, operate fissando a livello di cartella.
Profilo dell’autore
Pagina di presentazione dell’autore dell’articolo.
Go Komura
Rappresentante di KomuraSoft LLC
Specializzato nello sviluppo di software Windows, nella consulenza tecnica e nell’analisi dei malfunzionamenti, soprattutto nei progetti con sistemi esistenti e guasti difficili da riprodurre.