繁体   English   中英

读取文件/文件夹可用性状态

[英]Read file/folder Availability Status

C#-我正在构建一个控制台应用程序以读取OneDrive文件夹状态。 我可以读取文件/文件夹的许多属性,但不知道如何在此处获取“状态”列的值。

更新:此方法与此处描述的方法不同(使用Shell32,注册表...)。 如何检查本地OneDrive文件夹是否同步?

所以它不是重复的问题

状态属性

在此处输入图片说明

添加对Shell32的引用,例如C:\\ Windows \\ SysWOW64 \\ shell32.dll(我确实尝试过WindowsAPICodePack ShellPropertyCollection,但没有用)

public static class OneDriveExtensions
{
    private static int GetAvailabilityStatusIndex(Folder folder)
    {
        var index = 0;
        while (true)
        {
            var details = folder.GetDetailsOf(folder, index);
            if (details == "Availability status")
            {
                return index;
            }
            index++;
        }
    }
    public static string OneDriveAvailability(this FileInfo file)
    {
        int availabilityStatusIndex;
        return OneDriveAvailability(file, out availabilityStatusIndex);
    }
    public static string OneDriveAvailability(this FileInfo file,out int availabilityStatusIndex)
    {

        Shell shell = new Shell();
        Folder objFolder = shell.NameSpace(file.DirectoryName);
        availabilityStatusIndex = GetAvailabilityStatusIndex(objFolder);
        return objFolder.GetDetailsOf(objFolder.ParseName(file.Name), availabilityStatusIndex);

    }
    public static string OneDriveAvailability(this FileInfo file, int availabilityStatusIndex)
    {
        Shell shell = new Shell();
        Folder objFolder = shell.NameSpace(file.DirectoryName);
        FolderItem objFolderItem = objFolder.ParseName(file.Name);
        return objFolder.GetDetailsOf(objFolderItem, availabilityStatusIndex);

    }
    public static IEnumerable<OneDriveFileInfo> OneDriveAvailability(this DirectoryInfo directory,Func<DirectoryInfo,IEnumerable<FileInfo>> files)
    {
        var requireIndex = true;
        int availabilityStatusIndex = 0;
        return files(directory).Select(f =>
        {
            string oneDriveAvailability;
            if (requireIndex)
            {
                requireIndex = false;
                oneDriveAvailability= f.OneDriveAvailability(out availabilityStatusIndex);
            }
            else
            {
                oneDriveAvailability= f.OneDriveAvailability(availabilityStatusIndex);
            }
            return new OneDriveFileInfo(oneDriveAvailability, f);
        });
    }
    public static IEnumerable<OneDriveFileInfo> OneDriveAvailability(this IEnumerable<FileInfo> files,int availabilityIndex)
    {
        return files.Select(f => new OneDriveFileInfo(f.OneDriveAvailability(availabilityIndex), f));
    }
}
public class OneDriveFileInfo
{
    public OneDriveFileInfo(string availabilityStatus, FileInfo file)
    {
        this.AvailabilityStatus = availabilityStatus;
        this.File = file;
    }
    public string AvailabilityStatus { get; private set; }
    public FileInfo File { get; private set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM