winrt如何使用c#从设备获取文件列表
winrt how to get files list from device using c#
我需要在我的通用应用程序中获取设备(phone 或 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 Drive
和 unexisted method Environment.GetLogicalDrives()
。
谁能说说在 winRT 中是怎么做到的?
你试过了吗System.IO.Directory.GetLogicalDrives()
?
我认为 Environment.GetLogicalDrives() 仅适用于 Win32/Win64。如果我没记错的话 System.IO.Directory 存在于 mscorlib 中,并且在 Phone、RT 或常规版本中广泛可用。
MSDN 参考资料:
https://msdn.microsoft.com/en-us/library/system.io.directory.getlogicaldrives%28v=vs.110%29.aspx
您找不到在 WinRT 应用程序中获取所有逻辑驱动器的方法; WinRT 应用程序存在于沙盒环境中,如果在应用程序清单中声明为功能,则只能访问它们自己的独立存储或已知文件夹(如音乐)。
例如,要访问用户的音乐文件夹,您可以这样做(不要忘记在应用程序清单中声明该功能):
StorageFolder folder = Windows.Storage.KnownFolders.MusicLibrary;
访问文件系统任何其他部分的唯一方法是用户通过文件选择器明确授予访问权限:
var folderPicker = new FolderPicker();
var folder = await folderPicker.PickSingleFolderAsync();
我需要在我的通用应用程序中获取设备(phone 或 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 Drive
和 unexisted method Environment.GetLogicalDrives()
。
谁能说说在 winRT 中是怎么做到的?
你试过了吗System.IO.Directory.GetLogicalDrives()
?
我认为 Environment.GetLogicalDrives() 仅适用于 Win32/Win64。如果我没记错的话 System.IO.Directory 存在于 mscorlib 中,并且在 Phone、RT 或常规版本中广泛可用。
MSDN 参考资料:
https://msdn.microsoft.com/en-us/library/system.io.directory.getlogicaldrives%28v=vs.110%29.aspx
您找不到在 WinRT 应用程序中获取所有逻辑驱动器的方法; WinRT 应用程序存在于沙盒环境中,如果在应用程序清单中声明为功能,则只能访问它们自己的独立存储或已知文件夹(如音乐)。
例如,要访问用户的音乐文件夹,您可以这样做(不要忘记在应用程序清单中声明该功能):
StorageFolder folder = Windows.Storage.KnownFolders.MusicLibrary;
访问文件系统任何其他部分的唯一方法是用户通过文件选择器明确授予访问权限:
var folderPicker = new FolderPicker();
var folder = await folderPicker.PickSingleFolderAsync();