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ý

· · 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”.

Thay thế giả định ngầm của ứng dụng nghiệp vụ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àiGiả định ngầm truyền thốngNội dung thật trên đĩa cục bộGiả định đã bị thayNội dung thật ở trên mâyCục bộ chỉ còn bề ngoàiMộ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

Hai đường KFM được bậtĐă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ùngThiết lập ban đầu PC mớiĐăng nhập bằng tài khoảnSao lưu được đề xuất mặc địnhTiếp tục như vậy thì bậtChính sách tổ chứcKFMSilentOptInÁp dụng hàng loạt không hỏiKFM bật

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 (SHGetKnownFolderPathEnvironment.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ế.

Cách ứng dụng phân giải đường dẫn sau KFMSau 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ệpAPI thư mục đã biếtĐường dẫn cố định gắn cứngKFM đã bậtMáy tính thật và tương tự chuyển xuống dưới OneDriveỨng dụng phân giải đường dẫn thế nào?Lấy đường dẫn đúng sau chuyển và vẫn chạyKhô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

Ba trạng thái Tệp theo yêu cầu và các chuyển tiếpTệ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ự độngMở (hydrat hóa)Giải phóng dung lượngCảm biến bộ nhớLuôn giữ trên thiết bị nàyLuôn giữ trên thiết bị nàyBỏ ghimChỉ-trực-tuyến (dấu mây)Sẵn có cục bộĐã ghim (Luôn giữ trên thiết bị này)

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

Hydrat hóa khi mở chỗ giữ chỗ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ụcNhà cung cấp đồng bộMinifilter cldflt.sysỨng dụng nghiệp vụNhà cung cấp đồng bộMinifilter cldflt.sysỨng dụng nghiệp vụYêu cầu mở và đọcRa lệnh truyền dữ liệuTải xuống hoàn tấtViệ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”.

Che giấu điểm phân tích lại, và khác biệt về vẻ ngoàiDanh 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ởĐộng cơ đồng bộ và tương tựMọi ứng dụng khácChỗ giữ chỗ (điểm phân tích lại)Tiến trình nào đã mở?Thấy như điểm phân tích lạiTrông như tệp thườngTrô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.

Chỗ giữ chỗ trông thế nào trong thuộc tínhTrong 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 đứngThuộc tính chỗ giữ chỗKích thước là kích thước gốcKích thước trên đĩa gần như 0Giả định phải có nội dung thậtKhô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.

Thứ tự chuyển từ chỉ-trực-tuyến sang sẵn có cục bộ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 -pchỉ attrib -pattrib +pattrib -pChỉ-trực-tuyến (U)Vẫn U; nội dung thật không được lấyĐã ghim (tải nội dung thật)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”.

Các nhánh khi truy cập tệp chỉ-trực-tuyếnKiể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ờKhôngKiểm tra tồn tại, hoặc lấy thuộc tính hoặc kích thướcThành côngĐọc nội dungHydrat hóa bắt đầuOneDrive đang chạy và mạng khỏe?Đọc được sau khi tảiLỗ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

Cách lô kích hoạt tải xuống mọi tệpMộ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ề sauKhôngMột lô dưới OneDriveHydrat hóa mọi tệp chạmChậm xử lý và áp lực đĩaToast có thể xuất hiệnNgười dùng đã chặn?Tải xuống tiếp tục thất bại về sauTả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.Archive và 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
Mẫu hành vi sai của mã không chờ thuộc tínhMã 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ínhMã không chờ thuộc tínhKiểm tra bằng chính xácHiểu sai OFFLINEThao tác thuộc tính phá tổ hợpBị loại hoặc lỗi vì không mong đợiBỏ 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.

Vòng thông báo thay đổi từ theo dõi và viết lạiNế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 đổiSự kiện thay đổiỨng dụng theo dõi nhậpViết lại cùng thư mụcỨng dụng đồng bộ tải lênThuộc tính hoặc kích thước được cập nhậtĐồng bộ thay đổi từ thiết bị khác

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”.

Vấn đề đồng bộ do khóa độc quyền và sửa trên nhiều PCTrong 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Ứng dụng mở bằng khóa độc quyềnKhông đồng bộ được; lỗi thành bình thườngCùng tệp được sửa trên nhiều PCBản sao xung đột được sinhBản trùng với tên PC hoặc bản saoGiả đị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

Hydrat hóa do sản phẩm bảo mật hoặc bộ lập chỉ mục tìm kiếmKhi 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ángSản phẩm tôn trọngSản phẩm không tôn trọngQuét đầy đủ hoặc bộ lập chỉ mục tìm kiếmTôn trọng thuộc tính RECALL?Bỏ qua chỗ giữ chỗChạm nội dung và hydrat hóaBăng thông và đĩa căng ban đêmĐế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);
}
Đường phán đoán từ thuộc tính lúc liệt kê rồi mới mở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ảKhôngXác nhận thuộc tính lúc liệt kêChỗ giữ chỗ?Bỏ qua và để nhật ký cảnh báoChạy nhậpChí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
Hiệu quả và giới hạn của FILE_FLAG_OPEN_NO_RECALLFILE_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ínhMở với cờ NO_RECALLĐọc nội dungTruyền dữ liệu xảy raKhông trở thành cư trú cục bộKết thúc chỉ với siêu dữ liệuKhô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 /d từ kịch bản tạo ảnh (bạn chỉ định -u cù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
Các nhánh chuyển đổi tự động sang chỉ-trực-tuyến của Cảm biến bộ nhớ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ếnKhôngKhôngGiải phóng tự động Cảm biến bộ nhớĐã ghim?Ngoài phạm vi; nội dung thật được giữKhông mở trong một số ngày?Trả về chỉ-trực-tuyếnNội dung thật được giữ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.

Đường từ biện pháp tạm tới phản hồi lâu dàiTạ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àiPhía ứng dụngPhía CNTTGhim tạmNội dung thật được xếp cục bộNghiệp vụ tiếp tụcNguyên nhân cốt yếu ở đâu?Tới phản hồi Chương 6Tớ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

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ệ.

Liên kết tham khảo

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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. 

  14. 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. 

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.

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.

Bài viết liên quan trực tiếp đến các dịch vụ sau.

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.

Hồ sơ tác giả

Trang giới thiệu tác giả bài viết.

Go Komura

Đại diện của KomuraSoft LLC

Chuyên về phát triển phần mềm Windows, tư vấn kỹ thuật và điều tra lỗi, đặc biệt trong các dự án có hệ thống hiện hữu và lỗi khó tái hiện.

Liên kết công khai

Quay lại blog