Đây là một giải pháp để đọc - không phải ghi - các thuộc tính mở rộng dựa trên những gì tôi tìm thấy trên trang này và trợ giúp với các đối tượng shell32 .
Để rõ ràng đây là một vụ hack. Có vẻ như mã này sẽ vẫn chạy trên Windows 10 nhưng sẽ hiển thị trên một số thuộc tính trống. Phiên bản trước của Windows nên sử dụng:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
Trên Windows 10, chúng tôi giả định rằng có khoảng 320 thuộc tính để đọc và chỉ cần bỏ qua các mục trống:
private Dictionary<string, string> GetExtendedProperties(string filePath)
{
var directory = Path.GetDirectoryName(filePath);
var shell = new Shell32.Shell();
var shellFolder = shell.NameSpace(directory);
var fileName = Path.GetFileName(filePath);
var folderitem = shellFolder.ParseName(fileName);
var dictionary = new Dictionary<string, string>();
var i = -1;
while (++i < 320)
{
var header = shellFolder.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header)) continue;
var value = shellFolder.GetDetailsOf(folderitem, i);
if (!dictionary.ContainsKey(header)) dictionary.Add(header, value);
Console.WriteLine(header +": " + value);
}
Marshal.ReleaseComObject(shell);
Marshal.ReleaseComObject(shellFolder);
return dictionary;
}
Như đã đề cập, bạn cần tham khảo Com assembly Interop.Shell32.
Nếu bạn nhận được một ngoại lệ liên quan đến STA, bạn sẽ tìm thấy giải pháp ở đây:
Ngoại lệ khi sử dụng Shell32 để nhận thuộc tính mở rộng Tệp
Tôi không biết những tên thuộc tính đó sẽ như thế nào trên một hệ thống nước ngoài và không thể tìm thấy thông tin về những hằng số có thể bản địa hóa sẽ sử dụng để truy cập từ điển. Tôi cũng thấy rằng không phải tất cả các thuộc tính từ hộp thoại Thuộc tính đều có trong từ điển được trả về.
BTW điều này cực kỳ chậm và - ít nhất là trên Windows 10 - phân tích cú pháp ngày trong chuỗi được truy xuất sẽ là một thách thức vì vậy sử dụng điều này có vẻ là một ý tưởng tồi khi bắt đầu.
Trên Windows 10, bạn chắc chắn nên sử dụng thư viện Windows.Storage chứa SystemPhotoProperties, SystemMusicProperties, v.v.
https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
Và cuối cùng, tôi đã đăng một giải pháp tốt hơn nhiều sử dụng WindowsAPICodePack ở đó