0

我需要在我的通用应用程序中获取设备(手机或 PC)中所有文件的列表。在 wpf 我做了一些这样的事情:

class Collection {
    private StringCollection seachResults; 
    //find all mp3 files in local storage
    private void ScanDrives() {
        seachResults.Clear();
        string[] drives = Environment.GetLogicalDrives();
        foreach (string dr in drives) {
            DriveInfo di = new DriveInfo(dr);
            if (!di.IsReady) {
                //skip if drive not ready
                continue;
            }
            DirectoryInfo rootDir = di.RootDirectory;
            WalkDirectoryTree(rootDir);
        }
    }

    private void WalkDirectoryTree(DirectoryInfo root) {
        FileInfo[] files = null;
        DirectoryInfo[] subDirs = null;
        try {
            files = root.GetFiles("*.mp3");
        } catch (UnauthorizedAccessException e) {

        } catch (DirectoryNotFoundException e) {

        }

        if (files != null) {
            foreach (FileInfo fileInfo in files) {
                seachResults.Add(fileInfo.FullName);
            }
            subDirs = root.GetDirectories();
            foreach (DirectoryInfo dirInfo in subDirs) {
                WalkDirectoryTree(dirInfo);
            }
        }
    }
}

但是,当我尝试将其迁移到 winRT 应用程序时,会出现一些错误,例如unknown type Driveunexisted method Environment.GetLogicalDrives().

谁能说在winRT中如何做到这一点?

4

2 回答 2

1

您不会找到在 WinRT 应用程序中获取所有逻辑驱动器的方法;WinRT 应用程序存在于沙盒环境中,并且如果在应用程序清单中声明为功能,则只能访问它们自己的隔离存储或已知文件夹(如音乐)。

例如,要访问用户的音乐文件夹,您可以这样做(不要忘记在应用清单中声明该功能):

StorageFolder folder = Windows.Storage.KnownFolders.MusicLibrary;

访问文件系统任何其他部分的唯一方法是用户通过文件选择器明确授予访问权限:

var folderPicker = new FolderPicker();
var folder = await folderPicker.PickSingleFolderAsync();
于 2015-05-27T10:05:06.440 回答
-1

你试过System.IO.Directory.GetLogicalDrives()吗?

我相信 Environment.GetLogicalDrives() 仅适用于 Win32/Win64。如果我没记错的话,System.IO.Directory 存在于 mscorlib 中,并且可以在 Phone、RT 或 Regular 版本中广泛使用。

MSDN 参考资料:

https://msdn.microsoft.com/en-us/library/system.io.directory.getlogicaldrives%28v=vs.110%29.aspx

于 2015-05-26T15:13:51.487 回答