OneDrive "Tệp theo yêu cầu" và ứng dụng nghiệp vụ — giả định mà chỗ giữ chỗ phá vỡ và cách xử lý
· Go Komura · OneDrive, Tệp theo yêu cầu, KFM, Windows, Ứng dụng nghiệp vụ, Lưu trữ đám mây, Hệ thống tệp, Khắc phục sự cố, Hệ thống thông tin
“Ứng dụng nghiệp vụ không đọc được CSV tôi lưu trên máy tính.” “Lần nhập từng chạy được lại thất bại với ‘không tìm thấy tệp’ sau khi thay PC.” “Explorer hiện tệp, nhưng mở từ ứng dụng thì lỗi.” — Vài năm gần đây, kiểu tư vấn này từ khách hàng đã thành chuyện thường.
Khi điều tra, nguyên nhân thường không phải lỗi ứng dụng mà là “sao lưu tự động Máy tính và Tài liệu” của OneDrive (Known Folder Move, KFM) và “Tệp theo yêu cầu”. Máy tính thật đã chuyển tới C:\Users\<tên>\OneDrive\Desktop, và một phần tệp bạn thấy ở đó là “chỗ giữ chỗ” không có nội dung cục bộ. Người dùng và CNTT cứ dùng PC mà không nhận ra thay đổi này.
Nói cách khác, giả định ngầm của ứng dụng nghiệp vụ rằng “tệp nằm trên đĩa cục bộ” đã, không ai quyết định, bị thay bằng giả định rằng “tệp ở trên mây, và cục bộ chỉ còn bề ngoài”. Nhắm tới nhân viên CNTT doanh nghiệp vừa và nhỏ cùng nhà phát triển ứng dụng Windows, bài viết này sắp xếp, từ nguồn gốc Microsoft Learn, chỗ giữ chỗ hoạt động thế nào, cách phán đoán trạng thái từ thuộc tính tệp, những bẫy điển hình ứng dụng nghiệp vụ dẫm phải, phía phát triển và phía CNTT có thể làm gì, và quy trình phân loại khi được hỏi “tệp không mở được”.
flowchart TB
accTitle: Thay thế giả định ngầm của ứng dụng nghiệp vụ
accDescr: Giả định ngầm của ứng dụng nghiệp vụ rằng tệp nằm trên đĩa cục bộ đã, không ai quyết định, bị thay bằng giả định rằng nội dung thật ở trên mây và cục bộ chỉ còn bề ngoài
before["Giả định ngầm truyền thống"] --> b1["Nội dung thật trên đĩa cục bộ"]
after["Giả định đã bị thay"] --> a1["Nội dung thật ở trên mây"]
a1 --> a2["Cục bộ chỉ còn bề ngoài"]
a2 -.-> note["Một chỗ giữ chỗ"]
Hình 1: Giả định “nội dung thật ở cục bộ” đã, không ai quyết định, bị thay bằng “nội dung thật ở trên mây; cục bộ chỉ còn bề ngoài”.
1. Kết luận trước
- Máy tính, Tài liệu và Ảnh có thể đã bị KFM chuyển xuống dưới
C:\Users\<tên>\OneDrive\. Nó dễ được bật trong thiết lập ban đầu của PC mới, và tổ chức cũng có thể áp dụng hàng loạt bằng chính sách. Ứng dụng giả định đường dẫn cố định gãy ở đây.1 - Tệp theo yêu cầu bật mặc định trong ứng dụng đồng bộ hiện tại. Tệp tạo trên thiết bị khác hoặc trên Web xuất hiện như chỗ giữ chỗ “chỉ-trực-tuyến” không có nội dung cục bộ.23
- Danh tính thật của chỗ giữ chỗ là điểm phân tích lại do Cloud Files API quản lý (minifilter cldflt.sys). Nó trông như tệp thường với Explorer lẫn API tệp, và mở thì tự tải xuống (hydrat hóa).4
- Trạng thái có thể phán đoán từ thuộc tính tệp. FILE_ATTRIBUTE_OFFLINE, RECALL_ON_DATA_ACCESS, PINNED, UNPINNED và tương tự là dấu hiệu, lệnh attrib hiện chúng bằng chữ O, P và U. Chỉ kiểm tra thuộc tính không gây tải xuống.567
- Tai nạn điển hình của ứng dụng nghiệp vụ là tổ hợp “không mở được”, “chậm”, “phán đoán sai thuộc tính”, “bão sự kiện theo dõi” và “xung đột với đồng bộ”. Ngoại tuyến hoặc khi OneDrive dừng, hydrat hóa thất bại, và xử lý hàng loạt kích hoạt tải xuống mọi tệp.48
- Phản ứng phía ứng dụng là “tôn trọng chỗ giữ chỗ”. Cơ bản là phán đoán từ thuộc tính lúc liệt kê và không mở bừa, dùng FILE_FLAG_OPEN_NO_RECALL nếu cần, và không đặt thư mục dữ liệu dưới OneDrive.910
- Phản ứng phía CNTT là “vận hành bằng ghim” và “kiểm soát bằng chính sách”. Bảo đảm nội dung thật cho thư mục nghiệp vụ bằng “Luôn giữ trên thiết bị này”, và cấu hình KFM cùng Tệp theo yêu cầu có chủ đích bằng Chính sách nhóm / Intune. Đừng quên Cảm biến bộ nhớ cũng có thể “trả tệp không dùng về chỉ-trực-tuyến”.1112
Một câu: “tệp nhìn thấy trong Explorer” và “tệp có nội dung thật trên đĩa cục bộ” không còn là cùng một thứ.
2. Điều đang xảy ra — KFM và Tệp theo yêu cầu
2.1. Máy tính có thể không còn là C:\Users\<tên>\Desktop
Ứng dụng đồng bộ OneDrive có tính năng gọi là Known Folder Move (KFM). Trên màn hình cài đặt nó hiện là “Sao lưu”, “Sao lưu các thư mục quan trọng” và tương tự; khi bật, Máy tính, Tài liệu và Ảnh thật được chuyển (chuyển hướng) xuống dưới thư mục OneDrive.1
| Nơi người dùng thấy | Đường dẫn thật trước KFM | Đường dẫn thật sau KFM |
|---|---|---|
| Máy tính | C:\Users\taro\Desktop |
C:\Users\taro\OneDrive\Desktop |
| Tài liệu | C:\Users\taro\Documents |
C:\Users\taro\OneDrive\Documents |
| Ảnh | C:\Users\taro\Pictures |
C:\Users\taro\OneDrive\Pictures |
Trong thiết lập ban đầu (OOBE) của PC mới, đăng nhập bằng tài khoản Microsoft hoặc tài khoản công việc rộng rãi đưa sao lưu thư mục làm đề xuất mặc định, và tiếp tục như vậy thì bật. Tổ chức cũng có thể áp dụng hàng loạt mà không hỏi người dùng điều gì, bằng chính sách “Chuyển thầm các thư mục đã biết của Windows sang OneDrive” (KFMSilentOptIn).111
flowchart TB
accTitle: Hai đường KFM được bật
accDescr: Đăng nhập bằng tài khoản trong thiết lập ban đầu PC mới đưa sao lưu thư mục làm đề xuất mặc định và tiếp tục như vậy thì bật; trong tổ chức chính sách KFMSilentOptIn áp dụng hàng loạt mà không hỏi người dùng
oobe["Thiết lập ban đầu PC mới"] --> signin["Đăng nhập bằng tài khoản"]
signin --> prompt["Sao lưu được đề xuất mặc định"]
prompt --> on1["Tiếp tục như vậy thì bật"]
org["Chính sách tổ chức"] --> silent["KFMSilentOptIn"]
silent --> on2["Áp dụng hàng loạt không hỏi"]
on1 --> kfm["KFM bật"]
on2 --> kfm
Hình 2: KFM được bật mà không ai nhận ra, hoặc bởi đề xuất mặc định lúc thiết lập ban đầu, hoặc bởi chính sách áp dụng thầm của tổ chức.
Phần khó chịu là diện mạo trong Explorer hầu như không đổi. API thư mục đã biết của shell (SHGetKnownFolderPath và Environment.GetFolderPath của .NET) trả về đường dẫn đúng sau khi chuyển, nên ứng dụng ngoan vẫn chạy. Cái gãy là ứng dụng nhúng đường dẫn cố định như C:\Users\%USERNAME%\Desktop vào tệp cài đặt hoặc trong mã. Mẫu điển hình nhập thất bại với “không tìm thấy tệp” sau khi thay PC chính là thế.
flowchart TB
accTitle: Cách ứng dụng phân giải đường dẫn sau KFM
accDescr: Sau khi KFM chuyển Máy tính thật và các thư mục tương tự xuống dưới OneDrive, ứng dụng dùng API thư mục đã biết vẫn chạy với đường dẫn đúng sau chuyển, nhưng ứng dụng nhúng đường dẫn cố định thất bại với không tìm thấy tệp
kfm["KFM đã bật"] --> move["Máy tính thật và tương tự chuyển xuống dưới OneDrive"]
move --> how{"Ứng dụng phân giải đường dẫn thế nào?"}
how -->|API thư mục đã biết| ok["Lấy đường dẫn đúng sau chuyển và vẫn chạy"]
how -->|Đường dẫn cố định gắn cứng| ng["Không tìm thấy tệp"]
Hình 3: Sau KFM, ứng dụng dùng API thư mục đã biết vẫn chạy, nhưng ứng dụng gắn cứng đường dẫn cố định gãy ở đây.
2.2. Tệp theo yêu cầu — nhìn thấy, nhưng không có nội dung thật
Dấu vết kia là Tệp theo yêu cầu. Trong môi trường bật, mọi tệp trên OneDrive đều thấy trong Explorer, nhưng nội dung không được tải cho đến khi tệp được mở. Tính năng này bật mặc định trong ứng dụng đồng bộ hiện tại, và Microsoft cũng khuyên để bật.23
Trạng thái đọc được từ các biểu tượng trạng thái trong Explorer.13
| Biểu tượng | Trạng thái | Nội dung cục bộ |
|---|---|---|
| Dấu mây | Chỉ-trực-tuyến | Không (chỉ chỗ giữ chỗ) |
| Dấu kiểm trên nền trắng | Sẵn có cục bộ | Có (nhưng sau có thể được giải phóng tự động) |
| Dấu kiểm trắng trên nền xanh | Luôn giữ trên thiết bị này (đã ghim) | Có (ngoài giải phóng tự động) |
Quan trọng ở đây là trạng thái giữa. Tệp đã mở một lần và giờ có nội dung cục bộ có thể trở lại chỉ-trực-tuyến qua thao tác “Giải phóng dung lượng” của người dùng hoặc qua Cảm biến bộ nhớ, bàn sau. Đó là một nguyên nhân của sự cố khó tái hiện kiểu “tháng trước còn chạy”.312
stateDiagram-v2
accTitle: Ba trạng thái Tệp theo yêu cầu và các chuyển tiếp
accDescr: Tệp chỉ-trực-tuyến trở thành sẵn có cục bộ khi mở, nhưng Giải phóng dung lượng hoặc Cảm biến bộ nhớ có thể trả nó về chỉ-trực-tuyến, và chỉ tệp đã ghim nằm ngoài giải phóng tự động
s1: Chỉ-trực-tuyến (dấu mây)
s2: Sẵn có cục bộ
s3: Đã ghim (Luôn giữ trên thiết bị này)
s1 --> s2: Mở (hydrat hóa)
s2 --> s1: Giải phóng dung lượng
s2 --> s1: Cảm biến bộ nhớ
s1 --> s3: Luôn giữ trên thiết bị này
s2 --> s3: Luôn giữ trên thiết bị này
s3 --> s2: Bỏ ghim
Hình 4: Ba trạng thái Tệp theo yêu cầu. “Sẵn có cục bộ” có thể tự động trở lại chỉ-trực-tuyến; ghim nằm ngoài điều đó.
3. Danh tính thật của chỗ giữ chỗ — Cloud Files API và điểm phân tích lại
Tệp theo yêu cầu được triển khai trên cơ chế OS đưa vào Windows 10 phiên bản 1709, Cloud Files API. Đơn vị làm việc phía hệ thống tệp là minifilter hệ thống tệp tên cldflt.sys (tên dịch vụ CldFlt, “Windows Cloud Files Filter Driver”), và OneDrive là một “nhà cung cấp đồng bộ” dùng API này.47
Chỗ giữ chỗ về kỹ thuật là điểm phân tích lại (reparse point). Trên hệ thống tệp chỉ có siêu dữ liệu như tên, kích thước và dấu thời gian (khoảng 1KB); không có dữ liệu nội dung. Khi ứng dụng mở tệp và đọc, minifilter phát hiện yêu cầu, bảo nhà cung cấp đồng bộ truyền dữ liệu, chờ tải xong, rồi việc đọc tiếp tục. Lần lấy này gọi là hydrat hóa; vứt nội dung cục bộ và trở về chỗ giữ chỗ gọi là khử nước.4
sequenceDiagram
accTitle: Hydrat hóa khi mở chỗ giữ chỗ
accDescr: Khi ứng dụng mở chỗ giữ chỗ và đọc, minifilter cldflt.sys phát hiện yêu cầu, bảo nhà cung cấp đồng bộ truyền dữ liệu, chờ tải xong, rồi việc đọc tiếp tục
participant app as Ứng dụng nghiệp vụ
participant flt as Minifilter cldflt.sys
participant sync as Nhà cung cấp đồng bộ
app->>flt: Yêu cầu mở và đọc
flt->>sync: Ra lệnh truyền dữ liệu
sync-->>flt: Tải xuống hoàn tất
flt-->>app: Việc đọc tiếp tục
Hình 5: Việc đọc chỗ giữ chỗ tiếp tục sau khi minifilter bắt nhà cung cấp đồng bộ lấy dữ liệu.
Nghe “điểm phân tích lại” khiến bạn lo tương thích với mã cũ “xử lý đặc biệt điểm phân tích lại nếu phát hiện”, nhưng vì tương thích Cloud Files API che giấu việc đó là điểm phân tích lại với mọi người trừ động cơ đồng bộ và các tiến trình dưới %systemroot%. Từ ứng dụng thường, nó trông như “tệp thường chỉ hơi chậm khi mở”. Sự trong suốt triệt để đó, vừa tiện, vừa là lý do “ứng dụng bị phá giả định mà không nhận ra”.4 Chính cơ chế điểm phân tích lại được giải thích trong “NTFS Internals”.
flowchart TB
accTitle: Che giấu điểm phân tích lại, và khác biệt về vẻ ngoài
accDescr: Danh tính thật của chỗ giữ chỗ là điểm phân tích lại, nhưng Cloud Files API che điều đó với các tiến trình khác động cơ đồng bộ, nên từ ứng dụng thường nó trông như tệp thường chỉ hơi chậm khi mở
ph["Chỗ giữ chỗ (điểm phân tích lại)"] --> who{"Tiến trình nào đã mở?"}
who -->|Động cơ đồng bộ và tương tự| raw["Thấy như điểm phân tích lại"]
who -->|Mọi ứng dụng khác| plain["Trông như tệp thường"]
plain -.-> note["Trông chỉ hơi chậm khi mở"]
Hình 6: Việc đó là điểm phân tích lại bị che với mọi người trừ động cơ đồng bộ, và với ứng dụng thường nó trông như tệp thường.
Trong thuộc tính Explorer, chỗ giữ chỗ có vẻ đặc trưng là “Kích thước” hiện kích thước gốc, trong khi “Kích thước trên đĩa” gần như 0. Giả định “có kích thước nên phải có nội dung thật” không đứng ở đây.
flowchart TB
accTitle: Chỗ giữ chỗ trông thế nào trong thuộc tính
accDescr: Trong thuộc tính Explorer chỗ giữ chỗ hiện kích thước gốc là Kích thước trong khi Kích thước trên đĩa gần như 0, nên giả định rằng có kích thước thì phải có nội dung thật không đứng
prop["Thuộc tính chỗ giữ chỗ"] --> size["Kích thước là kích thước gốc"]
prop --> disk["Kích thước trên đĩa gần như 0"]
size -.-> trap["Giả định phải có nội dung thật"]
disk -.-> truth["Không có nội dung cục bộ"]
Hình 7: Chỗ giữ chỗ hiện kích thước gốc là “Kích thước” trong khi “Kích thước trên đĩa” gần như 0.
4. Thuộc tính tệp cho bạn biết trạng thái
Trạng thái chỗ giữ chỗ được công bố như thuộc tính tệp thường. Các thuộc tính chính như sau.5
| Thuộc tính | Giá trị | Ý nghĩa |
|---|---|---|
| FILE_ATTRIBUTE_OFFLINE | 0x00001000 | Dữ liệu không sẵn ngay (thuộc tính truyền thống của quản lý lưu trữ phân cấp) |
| FILE_ATTRIBUTE_RECALL_ON_OPEN | 0x00040000 | Không có nội dung cục bộ vật lý. Chỉ xuất hiện trong kết quả liệt kê thư mục |
| FILE_ATTRIBUTE_PINNED | 0x00080000 | Người dùng muốn “luôn giữ cục bộ” (đã ghim) |
| FILE_ATTRIBUTE_UNPINNED | 0x00100000 | Không cần giữ nội dung cục bộ (ý định làm chỉ-trực-tuyến) |
| FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS | 0x00400000 | Một phần hoặc toàn bộ nội dung không cục bộ. Đọc gây lấy từ xa |
Lệnh attrib của dấu nhắc lệnh có thể hiện và đặt chúng bằng một chữ. O là thuộc tính ngoại tuyến, P đã ghim, U bỏ ghim.6 Tương ứng với trạng thái Tệp theo yêu cầu OneDrive được Microsoft sắp như sau.7
| Trạng thái Tệp theo yêu cầu | Thuộc tính | Lệnh để đặt |
|---|---|---|
| Luôn sẵn có (đã ghim) | Pinned (hiện P) | attrib +p <path> |
| Sẵn có cục bộ | Không P cũng không U | attrib -p <path> |
| Chỉ-trực-tuyến | Unpinned (hiện U) | attrib +u <path> |
Một lưu ý. Chuyển trạng thái có thứ tự. Khi bạn muốn tệp chỉ-trực-tuyến (U) thành “sẵn có cục bộ”, chỉ chạy -p để lại U và nội dung thật không được lấy. Tài liệu Microsoft cũng chỉ quy trình trước hết làm +p (luôn sẵn có) để tải nội dung thật rồi -p.7 Trong kịch bản phải chuyển trạng thái hiện có một cách đáng tin, an toàn hơn là xóa thuộc tính đối lập cùng lúc, như attrib +p -u.
flowchart TB
accTitle: Thứ tự chuyển từ chỉ-trực-tuyến sang sẵn có cục bộ
accDescr: Chỉ chạy attrib -p trên tệp chỉ-trực-tuyến để lại thuộc tính U và nội dung thật không được lấy; bạn cần quy trình trước hết tải nội dung thật bằng attrib +p rồi -p
u["Chỉ-trực-tuyến (U)"] -->|chỉ attrib -p| stay["Vẫn U; nội dung thật không được lấy"]
u -->|attrib +p| pin["Đã ghim (tải nội dung thật)"]
pin -->|attrib -p| local["Sẵn có cục bộ"]
Hình 8: Chuyển từ chỉ-trực-tuyến cần thứ tự trước hết lấy nội dung thật bằng +p rồi -p.
Ví dụ phán đoán trong PowerShell. Chỉ nhìn thuộc tính không gây hydrat hóa, nên bạn có thể dùng yên tâm cho điều tra và kiểm tra hàng loạt.
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 # Không phải toàn bộ nội dung cục bộ
Pinned = ($value -band 0x00080000) -ne 0 # Luôn giữ trên thiết bị này
Unpinned = ($value -band 0x00100000) -ne 0 # Chỉ-trực-tuyến
}
}
# Kiểm tra hàng loạt CSV dưới thư mục Tài liệu (nội dung không được tải).
# Phân giải đường dẫn bằng API thư mục đã biết. Gắn cứng tên hiển thị
# "Documents" có thể thành đường dẫn không tồn tại tùy tên thư mục thật
# (Documents so với tên bản địa hóa) và cấu hình KFM
Get-ChildItem ([Environment]::GetFolderPath('MyDocuments')) -Recurse -Filter *.csv |
ForEach-Object { Test-CloudPlaceholder $_.FullName } |
Where-Object RecallOnDataAccess |
Format-Table -AutoSize
Ép kiểu sang [int] vì liệt kê FileAttributes của .NET không định nghĩa tên như RECALL_ON_DATA_ACCESS. Toán tử bit trên giá trị số có thể phán đoán không rắc rối.
5. Bẫy ứng dụng nghiệp vụ dẫm phải
Đây là chủ đề chính. Sự trong suốt của chỗ giữ chỗ tiện hầu hết lúc, nhưng kết hợp với mẫu xử lý điển hình của ứng dụng nghiệp vụ thì hiện ra sáu hình sau.
5.1. Mở tự động bắt đầu tải xuống — “không mở được” khi ngoại tuyến
Mở tệp chỉ-trực-tuyến bắt đầu hydrat hóa ngay. Trực tuyến, với tệp nhỏ, nhanh đến mức bạn không nhận ra, nhưng khi OneDrive dừng, đăng xuất hoặc tạm dừng, khi mạng không khỏe, hoặc khi tệp lớn, nó trở thành “tệp tồn tại nhưng không mở được”. Lỗi có thể trở về mã họ cloud-file như ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING (0x8007016A, “The cloud file provider is not running”), hoặc được quan sát như hết giờ phía ứng dụng.8
Bẫy nữa là kiểm tra tồn tại tương đương File.Exists(), và lấy thuộc tính hoặc kích thước, thành công. Bạn nhận mẫu lỗi mà trực giác đĩa cục bộ không giải thích được: “kiểm tra tồn tại qua, nhưng đọc thất bại”.
flowchart TB
accTitle: Các nhánh khi truy cập tệp chỉ-trực-tuyến
accDescr: Kiểm tra tồn tại và lấy thuộc tính cùng kích thước thành công, nhưng đọc nội dung bắt đầu hydrat hóa; nếu OneDrive đang chạy và mạng khỏe thì đọc được sau khi tải, nếu không thì thất bại với lỗi như 0x8007016A hoặc hết giờ
check["Kiểm tra tồn tại, hoặc lấy thuộc tính hoặc kích thước"] --> ok1["Thành công"]
open["Đọc nội dung"] --> hyd["Hydrat hóa bắt đầu"]
hyd --> cond{"OneDrive đang chạy và mạng khỏe?"}
cond -->|Có| read["Đọc được sau khi tải"]
cond -->|Không| err["Lỗi như 0x8007016A, hoặc hết giờ"]
Hình 9: Kiểm tra tồn tại có thể thành công trong khi đọc thất bại. Thành hay bại tùy OneDrive có đang chạy và tùy mạng.
5.2. Xử lý hàng loạt kích hoạt tải xuống mọi tệp
Hướng một lô đọc mọi tệp trong thư mục, tính hash, tìm kiếm toàn văn, hoặc sao lưu tự làm vào cây dưới OneDrive thì hydrat hóa mọi tệp bạn chạm bị kích hoạt. Với thư mục vài GB, xử lý chậm bất thường, tải xuống cũng lấp đĩa, và trên PC dung lượng thấp thiếu chỗ trống mời một sự cố khác. Dung lượng Tệp theo yêu cầu đáng lẽ tiết kiệm biến mất trong một lần quét đầy đủ.
Ngoài ra, nếu ứng dụng gây hydrat hóa mà không có thao tác người dùng rõ ràng, Windows có thể hiện toast và cho người dùng chọn chặn. Một khi bị chặn, ứng dụng đó tiếp tục thất bại tải xuống về sau (có thể gỡ bằng “Tải xuống tệp tự động” trong Cài đặt). Đó là một nguyên nhân của “chỉ PC kia nhập thất bại”.4
flowchart TB
accTitle: Cách lô kích hoạt tải xuống mọi tệp
accDescr: Một lô dưới OneDrive kích hoạt hydrat hóa mọi tệp nó chạm, gây chậm xử lý và áp lực đĩa, và nếu người dùng chặn trên toast thì tải xuống tiếp tục thất bại về sau
scan["Một lô dưới OneDrive"] --> touch["Hydrat hóa mọi tệp chạm"]
touch --> cost["Chậm xử lý và áp lực đĩa"]
touch --> toast["Toast có thể xuất hiện"]
toast --> block{"Người dùng đã chặn?"}
block -->|Có| fail["Tải xuống tiếp tục thất bại về sau"]
block -->|Không| cont["Tải xuống tiếp tục"]
Hình 10: Một lô kích hoạt hydrat hóa mọi tệp, và nếu bị chặn trên toast thì thất bại tiếp tục về sau.
5.3. Hành vi sai của mã không chờ các thuộc tính
Mã không biết FILE_ATTRIBUTE_OFFLINE hoặc RECALL_ON_DATA_ACCESS hành xử sai ở chỗ không ngờ.
- Thuộc tính được kiểm tra bằng bằng chính xác (
attributes == FileAttributes.Archivevà tương tự), nên chỗ giữ chỗ bị loại hoặc xử lý như lỗi vì “tệp không mong đợi” - Quyết định loại trừ trong công cụ sao lưu hoặc đồng bộ hiểu thuộc tính OFFLINE là “đã đưa lên băng” và bỏ qua (hoặc, ngược lại, lấy mọi tệp lẽ ra phải loại)
- Kiểm tra chỉ-đọc hoặc thao tác bit lưu trữ phá tổ hợp thuộc tính
flowchart TB
accTitle: Mẫu hành vi sai của mã không chờ thuộc tính
accDescr: Mã không biết thuộc tính chỗ giữ chỗ hành xử sai như loại trừ hoặc xử lý lỗi từ kiểm tra bằng chính xác, bỏ qua hoặc lấy đầy từ hiểu sai OFFLINE, hoặc phá tổ hợp thuộc tính
code["Mã không chờ thuộc tính"] --> m1["Kiểm tra bằng chính xác"]
code --> m2["Hiểu sai OFFLINE"]
code --> m3["Thao tác thuộc tính phá tổ hợp"]
m1 --> r1["Bị loại hoặc lỗi vì không mong đợi"]
m2 --> r2["Bỏ qua, hoặc lấy đầy"]
Hình 11: Mã không biết OFFLINE hoặc thuộc tính họ RECALL hành xử sai như loại trừ, bỏ qua sai, hoặc phá thuộc tính.
Hướng dẫn Microsoft cho nhà phát triển minifilter nói rõ không nên phát đọc hoặc ghi cẩu thả tới tệp có RECALL_ON_DATA_ACCESS. Tài liệu nhắm tới trình điều khiển hạt nhân, nhưng nguyên tắc “chạm nội dung tệp có thuộc tính này = phát sinh chi phí lấy” áp dụng nguyên cho ứng dụng chế độ người dùng.10
5.4. Tương tác FileSystemWatcher và đồng bộ
Theo dõi thư mục dưới OneDrive bằng FileSystemWatcher thì bạn nhận không chỉ thao tác người dùng mà còn rất nhiều sự kiện từ hoạt động của ứng dụng đồng bộ. Mỗi lần thay đổi trên thiết bị khác được đồng bộ, và mỗi lần hydrat hóa hoặc khử nước đổi thuộc tính hoặc kích thước, sự kiện Changed có thể nổ. Hơn nữa, thiết kế viết kết quả theo dõi-và-nhập trở lại cùng thư mục trở thành “bão thông báo thay đổi” trong vòng viết → tải lên → cập nhật thuộc tính → sự kiện khác. Lọc sự kiện và thiết kế kiểm tra nội dung thật được bàn trong “A Practical Guide to FileSystemWatcher”, nhưng dưới OneDrive nhu cầu đó cao hơn một bậc.
flowchart TB
accTitle: Vòng thông báo thay đổi từ theo dõi và viết lại
accDescr: Nếu ứng dụng theo dõi nhận sự kiện thay đổi viết kết quả nhập trở lại cùng thư mục, tải lên và cập nhật thuộc tính của ứng dụng đồng bộ nổ sự kiện khác, và thành vòng — bão thông báo thay đổi
ev["Sự kiện thay đổi"] --> proc["Ứng dụng theo dõi nhập"]
proc --> write["Viết lại cùng thư mục"]
write --> up["Ứng dụng đồng bộ tải lên"]
up --> attr["Thuộc tính hoặc kích thước được cập nhật"]
attr --> ev
sync["Đồng bộ thay đổi từ thiết bị khác"] -.-> ev
Hình 12: Viết kết quả nhập trở lại cùng thư mục trở thành vòng trong đó hoạt động ứng dụng đồng bộ sinh sự kiện khác.
5.5. Xung đột đồng bộ khi khóa độc quyền, và tệp “Bản sao”
Trong lúc ứng dụng nghiệp vụ mở tệp bằng khóa độc quyền, ứng dụng đồng bộ không thể tải lên hay cập nhật tệp đó. Đặt ứng dụng giữ khóa lâu (Access .accdb, tệp dữ liệu định dạng tự làm, tệp nhật ký, và tương tự) dưới OneDrive khiến lỗi đồng bộ thành trạng thái bình thường. Ngược lại, khi cùng tệp được sửa trên nhiều PC, ứng dụng đồng bộ cố giữ cả hai bản và sinh tệp trùng với tên PC hoặc bản sao xung đột như “— bản sao”. Lần nhập giả định “một thư mục, một tệp” hành xử sai trên bản trùng này. Cơ bản thiết kế khóa xem “Mutual Exclusion Fundamentals for File-Based Integration”.
flowchart TB
accTitle: Vấn đề đồng bộ do khóa độc quyền và sửa trên nhiều PC
accDescr: Trong lúc ứng dụng mở tệp bằng khóa độc quyền ứng dụng đồng bộ không thể cập nhật và lỗi đồng bộ thành trạng thái bình thường; sửa cùng tệp trên nhiều PC sinh bản sao xung đột và giả định một-thư-mục-một-tệp sụp
lock["Ứng dụng mở bằng khóa độc quyền"] --> nosync["Không đồng bộ được; lỗi thành bình thường"]
multi["Cùng tệp được sửa trên nhiều PC"] --> conflict["Bản sao xung đột được sinh"]
conflict --> dup["Bản trùng với tên PC hoặc bản sao"]
dup --> bad["Giả định một-thư-mục-một-tệp sụp"]
Hình 13: Khóa độc quyền khiến lỗi đồng bộ thành trạng thái bình thường, và sửa trên nhiều PC mời hành vi sai từ bản sao xung đột.
5.6. Phần mềm diệt virus và bộ lập chỉ mục tìm kiếm kích hoạt hydrat hóa
Không chỉ ứng dụng nghiệp vụ đọc nội dung tệp. Quét đầy đủ của phần mềm diệt virus, và bộ lập chỉ mục tìm kiếm, cũng kích hoạt hydrat hóa nếu chúng chạm nội dung chỗ giữ chỗ. Microsoft Defender và sản phẩm tương tự bỏ qua tệp có thuộc tính RECALL_ON_DATA_ACCESS lúc quét theo yêu cầu, nhưng đó là phản ứng phía sản phẩm, và bạn không thể giả định mọi sản phẩm bảo mật sẽ cùng cẩn thận. Nếu thấy triệu chứng như “mạng và đĩa căng mỗi đêm lúc quét” hoặc “tệp đáng lẽ chỉ-trực-tuyến đến sáng đã hiện thực hết”, hãy nghi dòng này.14
flowchart TB
accTitle: Hydrat hóa do sản phẩm bảo mật hoặc bộ lập chỉ mục tìm kiếm
accDescr: Khi quét đầy đủ hoặc bộ lập chỉ mục tìm kiếm chạm nội dung chỗ giữ chỗ, sản phẩm tôn trọng thuộc tính RECALL thì bỏ qua, còn sản phẩm không tôn trọng thì hydrat hóa mọi tệp và gây áp lực băng thông đêm hoặc hiện thực buổi sáng
av["Quét đầy đủ hoặc bộ lập chỉ mục tìm kiếm"] --> care{"Tôn trọng thuộc tính RECALL?"}
care -->|Sản phẩm tôn trọng| skip["Bỏ qua chỗ giữ chỗ"]
care -->|Sản phẩm không tôn trọng| hyd["Chạm nội dung và hydrat hóa"]
hyd --> sym1["Băng thông và đĩa căng ban đêm"]
hyd --> sym2["Đến sáng tệp đã hiện thực hết"]
Hình 14: Quét không tôn trọng thuộc tính kích hoạt hydrat hóa mọi tệp, và hiện ra như tải đêm hoặc hiện thực buổi sáng.
6. Phản ứng phát triển ứng dụng — tôn trọng chỗ giữ chỗ
Chính sách cơ bản với tư cách nhà phát triển là coi chỗ giữ chỗ không phải “tệp hỏng” mà là “tệp có chi phí lấy”.
- Phán đoán từ thuộc tính lúc liệt kê, và đừng mở bừa. Trong quét thư mục, trước hết xác nhận từ thuộc tính (phán đoán Chương 4) xem có chỉ-trực-tuyến không, và chỉ mở tệp bạn cần nội dung. Cho xử lý “không chết người nếu thiếu” — thu nhật ký, tính hash, tạo xem trước — lựa chọn bỏ qua chỗ giữ chỗ.
// Định nghĩa bằng số các giá trị FileAttributes trong .NET không định nghĩa
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} chỉ-trực-tuyến; lần này bỏ qua");
continue;
}
Import(file.FullName);
}
flowchart TB
accTitle: Đường phán đoán từ thuộc tính lúc liệt kê rồi mới mở
accDescr: Trong quét thư mục, trước hết xác nhận thuộc tính lúc liệt kê; nếu là chỗ giữ chỗ thì bỏ qua và để nhật ký cảnh báo, và chỉ chạy nhập trên các tệp kia, để tránh hydrat hóa cẩu thả
enum["Xác nhận thuộc tính lúc liệt kê"] --> ph{"Chỗ giữ chỗ?"}
ph -->|Có| skip["Bỏ qua và để nhật ký cảnh báo"]
ph -->|Không| imp["Chạy nhập"]
skip -.-> note["Chính sách chỉ mở tệp cần nội dung"]
Hình 15: Phán đoán từ thuộc tính lúc liệt kê và bỏ qua chỗ giữ chỗ mà không mở, để tránh hydrat hóa cẩu thả.
- Lưu ý FILE_FLAG_OPEN_NO_RECALL không phải bảo đảm “đừng tải”. Chỉ định cờ này trên CreateFile có thể bày tỏ ý “dữ liệu lấy được nên để phía xa và không viết lại kho cục bộ”. Tuy nhiên đó chỉ là cờ để không làm dữ liệu lấy được cư trú cục bộ; nếu bạn đọc nội dung, chính việc truyền dữ liệu vẫn xảy ra. Nếu muốn tránh băng thông và độ trễ bản thân, kết thúc chỉ với thuộc tính, kích thước và dấu thời gian — đừng yêu cầu quyền đọc (mở với quyền truy cập 0, dùng siêu dữ liệu từ kết quả liệt kê). Đó là an toàn nhất.9
flowchart TB
accTitle: Hiệu quả và giới hạn của FILE_FLAG_OPEN_NO_RECALL
accDescr: FILE_FLAG_OPEN_NO_RECALL là cờ để không làm dữ liệu lấy được cư trú cục bộ; nếu bạn đọc nội dung thì chính việc truyền dữ liệu vẫn xảy ra, nên nếu muốn tránh truyền thì an toàn nhất là kết thúc chỉ với siêu dữ liệu như thuộc tính
flag["Mở với cờ NO_RECALL"] --> read["Đọc nội dung"]
read --> transfer["Truyền dữ liệu xảy ra"]
transfer --> nolocal["Không trở thành cư trú cục bộ"]
meta["Kết thúc chỉ với siêu dữ liệu"] --> safe["Không truyền; an toàn nhất"]
Hình 16: FILE_FLAG_OPEN_NO_RECALL chỉ ngăn trở thành cư trú cục bộ; nếu muốn tránh chính việc truyền, kết thúc chỉ với siêu dữ liệu.
- Ghi “cái này nằm dưới OneDrive” vào thông báo lỗi. Khi đọc thất bại, chỉ xác nhận đường dẫn đích có dưới
%OneDrive%và đưa vào thông báo đã giảm mạnh thời gian phân loại cho hiện trường và bàn trợ giúp. Nếu phát hiện lỗi họ cloud-file như 0x8007016A, lý tưởng là bảo người dùng “hãy kiểm tra trạng thái OneDrive”. - Đừng đặt thư mục dữ liệu ứng dụng dưới OneDrive. Trong môi trường KFM, “Tài liệu” cũng dưới OneDrive. Đặt cài đặt, cơ sở dữ liệu và tệp làm việc của ứng dụng vào
%ProgramData%hoặc%LocalAppData%, và đừng chọn Máy tính hoặc Tài liệu làm vị trí lưu mặc định hay thư mục nhập mặc định. Cách quyết định cái gì đặt đâu được tóm trong “How to Choose Where a Windows App Stores Local Data”. - Quyết định hành vi khi người dùng chọn vị trí dưới OneDrive. Với ứng dụng cho người dùng chọn vị trí lưu, hãy đưa sẵn vào đặc tả quyết định thiết kế như cảnh báo khi đường dẫn chọn nằm dưới OneDrive (dưới đường dẫn biến môi trường
OneDrive/OneDriveCommercial), hoặc chỉ từ chối đặt tệp khóa hoặc CSDL.
7. Phản ứng phía CNTT — kiểm soát bằng ghim và chính sách
Từ vị trí CNTT, vận hành thực tế không phải “tắt hết Tệp theo yêu cầu” mà là bảo đảm nội dung thật chỉ nơi nghiệp vụ cần.
- Ghim các thư mục ứng dụng nghiệp vụ đọc. Chọn “Luôn giữ trên thiết bị này” từ menu chuột phải Explorer, hoặc chạy
attrib +p -u <folder> /s /dtừ kịch bản tạo ảnh (bạn chỉ định-ucùng lúc để hỗn hợp tệp đã chỉ-trực-tuyến được chuyển đáng tin sang đã ghim). Tệp đã ghim có nội dung thật được bảo đảm cục bộ và cũng nằm ngoài chuyển đổi tự động sang chỉ-trực-tuyến bàn sau.72 - Cấu hình KFM và Tệp theo yêu cầu “có chủ đích”, không phải “thấy đã bật khi nhận ra”. Các chính sách chính (Chính sách nhóm / Intune) như sau.111
| Mục đích | Chính sách (giá trị đăng ký) | Hiệu quả |
|---|---|---|
| Kiểm soát Tệp theo yêu cầu | Use OneDrive Files On-Demand (FilesOnDemandEnabled) | Bật: người dùng mới mặc định chỉ-trực-tuyến. Tắt: đồng bộ đầy đủ cổ điển |
| Áp dụng hàng loạt KFM | Silently move Windows known folders to OneDrive (KFMSilentOptIn) | Chuyển Máy tính và tương tự không cần thao tác người dùng |
| Cấm KFM | Prevent users from moving their Windows known folders to OneDrive (KFMBlockOptIn) | Cấm chuyển thư mục đã biết |
| Cấm tắt KFM | Prevent users from redirecting their Windows known folders to their PC (KFMBlockOptOut) | Cấm người dùng tắt |
| Giảm dung lượng site nhóm | Convert synced team site files to online-only (DehydrateSyncedTeamSites) | Làm site nhóm đã đồng bộ thành chỉ-trực-tuyến (lưu ý nó tác động theo hướng nội dung thật biến mất) |
- Biết Cảm biến bộ nhớ chuyển thế nào. Cảm biến bộ nhớ có tính năng tự động trả tệp mây không mở trong một số ngày về chỉ-trực-tuyến, và bạn có thể cấu hình số ngày bằng chính sách (ConfigStorageSenseCloudContentDehydrationThreshold). Mặc định là 0 (không trả tự động), nhưng nếu người dùng đã bật từ màn hình cài đặt, hoặc tổ chức cấu hình cho thiết bị dung lượng thấp, thì “tệp mở tuần trước lại thành biểu tượng mây” xảy ra như hành vi bình thường. Tệp đã ghim nằm ngoài phạm vi, nên “ghim thư mục nghiệp vụ” cũng có tác dụng ở đây.122
flowchart TB
accTitle: Các nhánh chuyển đổi tự động sang chỉ-trực-tuyến của Cảm biến bộ nhớ
accDescr: Trong giải phóng tự động của Cảm biến bộ nhớ, tệp đã ghim nằm ngoài phạm vi và nội dung thật được giữ; tệp chưa ghim không mở trong một số ngày bị trả về chỉ-trực-tuyến
ss["Giải phóng tự động Cảm biến bộ nhớ"] --> pin{"Đã ghim?"}
pin -->|Có| stay["Ngoài phạm vi; nội dung thật được giữ"]
pin -->|Không| old{"Không mở trong một số ngày?"}
old -->|Có| dehyd["Trả về chỉ-trực-tuyến"]
old -->|Không| keep["Nội dung thật được giữ"]
ss -.-> def["Mặc định 0 không trả tự động"]
Hình 17: Cảm biến bộ nhớ trả tệp không mở trong một số ngày về chỉ-trực-tuyến, nhưng ghim nằm ngoài phạm vi.
- Ước lượng tác động trước khi tắt Tệp theo yêu cầu. Tắt FilesOnDemandEnabled trở thành đồng bộ tải đầy đủ cổ điển, nhưng tiêu thụ đĩa và tải băng thông lần đồng bộ đầu nhảy vọt. Microsoft khuyên để bật, và bạn nên coi việc tắt là biện pháp hạn chế sau khi xác nhận “khối lượng dữ liệu người dùng đích nhỏ” và “còn dư đĩa”.112
- Đưa vào quy trình hỗ trợ. Đặt quy trình phân loại chương sau vào mẫu yêu cầu “tệp trên máy tính không mở được” giữ chất lượng phản hồi dù người xử lý đổi.
8. Quy trình phân loại — khi được hỏi “tệp không mở được”
Khi nhận tư vấn, xác nhận từ trên xuống.
| # | Việc cần xác nhận | Cách | Bạn biết gì |
|---|---|---|---|
| 1 | Đường dẫn có dưới OneDrive? | Xác nhận gốc đồng bộ bằng echo %OneDrive% và khớp với đường dẫn đích. Cũng xác nhận đường dẫn thật của “Máy tính” trên thanh địa chỉ Explorer |
KFM / OneDrive có dính không |
| 2 | Trạng thái tệp | Xác nhận U (chỉ-trực-tuyến), P (đã ghim) và O bằng attrib <path>. Cũng xem “Kích thước trên đĩa” trong thuộc tính |
Nội dung thật có cục bộ, hay là chỗ giữ chỗ |
| 3 | OneDrive có đang chạy | Biểu tượng khay (đã đăng nhập, tạm dừng, lỗi), Get-Process OneDrive |
Hydrat hóa có thể không. 0x8007016A thường là dừng hoặc cấu hình sai8 |
| 4 | Mạng | Proxy doanh nghiệp, băng thông, khả năng tới dịch vụ OneDrive | Chính việc tải xuống có thể không |
| 5 | Chỗ trống đĩa | Chỗ trống trên volume đích. Ở dung lượng thấp còn có chính sách OneDrive chặn tải | Yếu tố khác của thất bại hydrat hóa |
| 6 | Hồ sơ thất bại | Ghi mã lỗi ứng dụng và thời điểm, khớp với hiện lỗi của ứng dụng đồng bộ | Là vấn đề phía ứng dụng hay phía OneDrive |
Biện pháp tạm là chuột phải thư mục đích và chọn “Luôn giữ trên thiết bị này” (hoặc attrib +p /s /d). Việc đó xếp nội dung thật cục bộ và nghiệp vụ có thể tiếp tục. Trên đó, quyết định nguyên nhân cốt yếu ở phía ứng dụng (Chương 6) hay phía CNTT (Chương 7) làm phản hồi lâu dài.
flowchart TB
accTitle: Đường từ biện pháp tạm tới phản hồi lâu dài
accDescr: Tạm thời, đặt thư mục đích thành Luôn giữ trên thiết bị này xếp nội dung thật cục bộ để nghiệp vụ tiếp tục; trên đó bạn quyết định nguyên nhân cốt yếu ở phía ứng dụng hay CNTT và đi tới phản hồi lâu dài
aid["Ghim tạm"] --> restore["Nội dung thật được xếp cục bộ"]
restore --> resume["Nghiệp vụ tiếp tục"]
resume --> judge{"Nguyên nhân cốt yếu ở đâu?"}
judge -->|Phía ứng dụng| dev["Tới phản hồi Chương 6"]
judge -->|Phía CNTT| ops["Tới phản hồi Chương 7"]
Hình 18: Biện pháp tạm là ghim, xếp nội dung thật và tiếp tục nghiệp vụ; phản hồi lâu dài đi tiếp sau khi quyết định phía ứng dụng hay phía CNTT.
Nếu đã xác nhận tới đây và “đường dẫn không dưới OneDrive” cũng như “cũng không phải chỗ giữ chỗ”, bạn chuyển sang các nguyên nhân kinh điển khác như thư mục dùng chung hoặc độ dài đường dẫn. “Pitfalls of Network Drives and UNC Paths” và “MAX_PATH and Windows Path/Filename Pitfalls” là bản đồ cho bước tiếp.
9. Tóm tắt
- KFM có thể đã chuyển Máy tính, Tài liệu và Ảnh thật xuống dưới
C:\Users\<tên>\OneDrive\. Ứng dụng giả định đường dẫn cố định gãy ở đây. Phân giải bằng API thư mục đã biết là bước đầu. - Tệp theo yêu cầu bật mặc định, và chỗ giữ chỗ không có nội dung cục bộ tồn tại như chuyện đương nhiên. Chỗ giữ chỗ là điểm phân tích lại của Cloud Files API (cldflt.sys), và mở thì tự hydrat hóa.
- Trạng thái có thể phán đoán từ thuộc tính tệp (OFFLINE / RECALL_ON_DATA_ACCESS / PINNED / UNPINNED) và hiện là O, P và U trong attrib. Chỉ kiểm tra thuộc tính không gây tải xuống.
- Tai nạn ứng dụng nghiệp vụ hiện ra như thất bại hydrat hóa khi ngoại tuyến, tải đầy từ xử lý hàng loạt, mã không chờ thuộc tính, tương tác FileSystemWatcher và đồng bộ, xung đột khóa độc quyền với đồng bộ, và hydrat hóa do sản phẩm bảo mật.
- Phía ứng dụng, cơ bản là “phán đoán từ thuộc tính và đừng mở bừa”, “đừng đặt thư mục dữ liệu dưới OneDrive”, và “nói rằng nó dưới OneDrive khi báo lỗi”.
- Phía CNTT, bạn tạo trạng thái dự định bằng “ghim thư mục nghiệp vụ” và “kiểm soát chính sách KFM, Tệp theo yêu cầu và Cảm biến bộ nhớ”.
- Phân loại có thể đi máy móc theo thứ tự đường dẫn → attrib → OneDrive đang chạy → mạng → chỗ trống → hồ sơ.
Lần sau được hỏi “tệp ở đó nhưng không mở được”, hãy hỏi điều này trước.
Tệp đó có thật sự trên đĩa cục bộ không? Hay chỉ bề ngoài của mây đang ngồi đó?
Bài viết liên quan
- The Depths of Windows I/O (Part 5) — NTFS Internals: Understanding the File System Through the MFT
- A Practical Guide to FileSystemWatcher - Handling Missed and Duplicate Events
- Pitfalls of Network Drives and UNC Paths — Working With File Servers (Shared Folders) From a Business Application
- Mutual Exclusion Fundamentals for File-Based Integration - Best Practices for File Locks and Atomic Claims
- 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
Lĩnh vực tư vấn liên quan
KomuraSoft LLC xử lý điều tra sự cố ứng dụng nghiệp vụ liên quan OneDrive và lưu trữ đám mây — “lần nhập từng chạy được sau khi thay PC không còn chạy”, “chỉ một PC kia tệp không mở được” — thiết kế và khắc phục xử lý tệp cùng theo dõi giả định chỗ giữ chỗ, và đánh giá thiết kế vị trí lưu trong môi trường KFM / Tệp theo yêu cầu. Bắt đầu từ khoanh triệu chứng cũng được — xin liên hệ.
- Phát triển ứng dụng Windows
- Điều tra lỗi và nguyên nhân
- Tư vấn kỹ thuật và đánh giá thiết kế
- Liên hệ với chúng tôi
Liên kết tham khảo
-
Microsoft Learn, Redirect and move Windows known folders to OneDrive. Rằng KFM chuyển Máy tính, Tài liệu và Ảnh xuống dưới OneDrive, cùng các chính sách đề xuất, áp dụng thầm, cấm tắt và cấm chuyển. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Recommended sync app configuration. Rằng Tệp theo yêu cầu bật mặc định và để bật được khuyên, và rằng Cảm biến bộ nhớ dọn “tệp sẵn có cục bộ chưa ghim”. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Support, Save disk space with OneDrive Files On-Demand for Windows. Ba trạng thái Tệp theo yêu cầu và các thao tác “Luôn giữ trên thiết bị này” cùng “Giải phóng dung lượng”. ↩ ↩2 ↩3
-
Microsoft Learn, Build a Cloud Sync Engine that Supports Placeholder Files. Tổng quan Cloud Files API, rằng chỗ giữ chỗ chỉ giữ khoảng 1KB siêu dữ liệu và mở thì tự hydrat hóa, rằng điểm phân tích lại bị che với các tiến trình khác động cơ đồng bộ và những tiến trình dưới %systemroot%, cùng toast và chặn hydrat hóa nền. ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Learn, File Attribute Constants. Định nghĩa và giá trị của FILE_ATTRIBUTE_OFFLINE, RECALL_ON_OPEN, RECALL_ON_DATA_ACCESS, PINNED và UNPINNED. ↩ ↩2
-
Microsoft Learn, attrib. Cú pháp lệnh attrib và các cờ thuộc tính gồm O (ngoại tuyến), P (đã ghim) và U (bỏ ghim). ↩ ↩2
-
Microsoft Learn, Query and set Files On-Demand states in Windows. Xác nhận trạng thái Tệp theo yêu cầu bằng attrib và đặt bằng +p, -p và +u, cùng dịch vụ CldFlt. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Error 0x8007016a when copying files in OneDrive. Rằng lỗi 0x8007016A “The cloud file provider is not running” xảy ra khi OneDrive cấu hình sai hoặc dừng, cùng các bước xử lý. ↩ ↩2 ↩3
-
Microsoft Learn, CreateFileW function (fileapi.h). Rằng FILE_FLAG_OPEN_NO_RECALL là cờ chỉ “dữ liệu yêu cầu nên để phía xa và không truyền lại kho cục bộ” (nó không ngăn lấy chính dữ liệu), cùng lấy thuộc tính bằng cách mở với quyền truy cập 0. ↩ ↩2
-
Microsoft Learn, Handling placeholders. Rằng chỗ giữ chỗ nên có FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS, và rằng đọc hoặc ghi cẩu thả tới tệp có thuộc tính này mời hydrat hóa không cần hoặc hỏng dữ liệu. ↩ ↩2
-
Microsoft Learn, IT Admins - Use OneDrive policies to control sync settings. Các chính sách cấu hình ứng dụng đồng bộ OneDrive bằng GPO/Intune, gồm FilesOnDemandEnabled, KFMSilentOptIn, KFMBlockOptIn, KFMBlockOptOut và DehydrateSyncedTeamSites. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Policy CSP - Storage. Rằng Cảm biến bộ nhớ có thể làm tệp mây không mở trong một số ngày thành chỉ-trực-tuyến, mặc định 0 (không trả tự động), và cấu hình 0–365 ngày. ↩ ↩2 ↩3
-
Microsoft Support, What do the OneDrive icons mean?. Ý nghĩa các biểu tượng trạng thái hiện trong Explorer, như mây và dấu kiểm. ↩
-
Microsoft Learn, Plan for an Azure File Sync deployment. Rằng quét diệt virus có thể gây gọi lại tệp có thuộc tính RECALL_ON_DATA_ACCESS, và rằng Microsoft Defender cùng sản phẩm tương tự bỏ qua tệp có thuộc tính này lúc quét theo yêu cầu. ↩
Bài viết liên quan
Các bài viết gần đây có cùng thẻ để tìm hiểu sâu hơn những chủ đề lân cận.
Ứng dụng hỏng khi thức dậy từ ngủ — Sự kiện nguồn Windows và cách viết ứng dụng nghiệp vụ sống sót
Bạn mở laptop và kết nối của ứng dụng nghiệp vụ đã chết — nguyên nhân là thiết kế chưa tính đến ngủ. Bài viết này trình bày luồng thông b...
Dẫn nhập khả năng tiếp cận ứng dụng Windows — Chuẩn bị cho UI Automation và yêu cầu điều chỉnh hợp lý
Với bối cảnh sửa đổi Đạo luật Xóa bỏ Phân biệt đối xử với Người khuyết tật có hiệu lực tháng 4 năm 2024, bài viết này sắp xếp đặt tên tro...
Cạm bẫy font và ký tự Nhật — xử lý JIS2004, IVS và gaiji trong ứng dụng nghiệp vụ
"Ký tự 葛 trông khác trên màn hình và trên biểu mẫu in." "Một ký tự trong tên người không hiển thị." Rắc rối ký tự trong hệ thống nghiệp v...
Từ Group Policy sang Intune — hướng dẫn di chuyển quản lý thiết bị cho doanh nghiệp vừa và nhỏ
Khi máy chủ AD đến hạn thay, nên giữ Group Policy hay chuyển sang Entra ID plus Intune? Bài viết này sắp xếp, cho doanh nghiệp vừa và nhỏ...
Đọc mã lỗi Windows — cấu trúc ba lớp Win32, HRESULT và NTSTATUS
Khi 0x80004005 xuất hiện, hãy tách nó trước khi tìm. Bài viết trình bày ba lớp Win32, HRESULT và NTSTATUS, mẫu 0x8007xxxx, và cách tra vớ...
Chủ đề liên quan
Các trang này đặt chủ đề trong bối cảnh rộng hơn của dịch vụ và quyết định.
Chủ đề kỹ thuật Windows
Cổng vào phát triển Windows, điều tra lỗi và khai thác tài sản hiện có.
Dịch vụ liên quan đến chủ đề này
Bài viết liên quan trực tiếp đến các dịch vụ sau.
Phát triển ứng dụng Windows
Ứng dụng nghiệp vụ, tích hợp thiết bị và công cụ liên lạc, từ yêu cầu đến phát triển.
Câu hỏi thường gặp
Các câu hỏi thường gặp khi tư vấn về chủ đề của bài viết.
- Ứng dụng nghiệp vụ báo "không tìm thấy tệp" và không đọc được CSV tôi đặt trên máy tính. Vì sao?
- Trong nhiều trường hợp chính thư mục Máy tính đã được Known Folder Move (KFM) của OneDrive chuyển xuống C:\Users\<tên người dùng>\OneDrive\Desktop, hoặc tệp đã trở thành chỗ giữ chỗ chỉ-trực-tuyến. Ứng dụng giả định đường dẫn cố định như C:\Users\<tên người dùng>\Desktop không tìm thấy tệp sau khi chuyển. Dù đường dẫn đúng, tệp chỉ-trực-tuyến vẫn có thể không mở khi OneDrive dừng hoặc mạng không khỏe. Trước hết xác nhận đường dẫn đích có nằm dưới OneDrive không, và dùng lệnh attrib kiểm tra xem U (chỉ-trực-tuyến) có được đặt không. Tạm thời, bạn có thể giữ nội dung thật cục bộ bằng "Luôn giữ trên thiết bị này" trong menu chuột phải.
- Chương trình có thể biết tệp có chỉ-trực-tuyến không?
- Có. Chỗ giữ chỗ chỉ-trực-tuyến mang các thuộc tính như FILE_ATTRIBUTE_OFFLINE và FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS (0x00400000), nên bạn có thể phán đoán trạng thái từ thuộc tính tệp mà không tải nội dung. Lấy thuộc tính hoặc liệt kê thư mục không gây hydrat hóa (tải xuống). Trong .NET một số giá trị không được định nghĩa trên FileAttributes, nên bạn ép kiểu sang số nguyên và kiểm bằng toán tử bit. Nếu thật sự cần mở mà không đọc nội dung, cũng có phương tiện như FILE_FLAG_OPEN_NO_RECALL của CreateFile.
- Tắt Tệp theo yêu cầu có giải quyết vấn đề không?
- Hãy coi việc tắt là biện pháp cuối cùng. Tắt thì mọi tệp trong phạm vi đồng bộ được tải xuống cục bộ, nên dung lượng đĩa và tải mạng của lần đồng bộ đầu trở nên lớn, và Microsoft cũng khuyên để bật. Thực tế linh hoạt hơn khi chỉ đặt các thư mục ứng dụng nghiệp vụ đọc thành "Luôn giữ trên thiết bị này" (ghim). Về căn bản hơn, sửa đáng tin cậy là thiết kế lại để thư mục dữ liệu và thư mục nhập của ứng dụng không nằm dưới quản lý OneDrive.
- Tôi đã đặt "Luôn giữ trên thiết bị này" nhưng một số tệp cuối cùng lại về biểu tượng mây. Vì sao?
- Trước hết xác nhận bằng lệnh attrib rằng tệp thật sự có ghim (thuộc tính P). Tệp đã ghim nằm ngoài chuyển đổi tự động sang chỉ-trực-tuyến của Cảm biến bộ nhớ, nhưng tệp chỉ "sẵn có cục bộ" vì ai đó đã mở, không ghim, có thể bị trả về chỉ-trực-tuyến sau một khoảng tùy cài đặt và chính sách Cảm biến bộ nhớ. Thao tác "Giải phóng dung lượng" của chính người dùng, và chính sách khiến tệp site nhóm chỉ-trực-tuyến (DehydrateSyncedTeamSites), cũng đưa biểu tượng mây trở lại. Với thư mục phải ở cục bộ vì nghiệp vụ, hãy vận hành bằng cách ghim theo phạm vi thư mục.