我正在尝试使用以下代码访问KnownFolders.MusicLibrary
中的文件。
internal async void Update()
{
StorageFolder rootFolder = KnownFolders.MusicLibrary;
ScanFolder(rootFolder);
}
private async void ScanFolder(StorageFolder storageFolder)
{
var items = await storageFolder.GetItemsAsync();
foreach (var item in items)
{
if (item is StorageFolder)
{
ScanFolder(item as StorageFolder);
}
else if (item is StorageFile)
{
var fs = new FileStream(item.Path, FileMode.Open, FileAccess.Read);
< ... snip ... >
}
}
}
我已检查MusicLibrary
功能,以便我可以使用KnownFolders.MusicLibrary
。
这似乎并没有授予我对库的文件访问权限,因为我收到以下错误:
+ [System.UnauthorizedAccessException]
{System.UnauthorizedAccessException: Access to the path 'C:\Data\Users\Public\Music\tmp' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
at MusicTrackerPhone.Library.<ScanFolder>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__3(Object state)} System.UnauthorizedAccessException
无法通过GUI添加FileType Association
(也不允许在xml中添加节点)。
如何为我的应用添加所需的声明?
完整的Package.appxmanifest:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
<Identity Name="aad31163-0d67-49ba-b569-80ff4d773fa0" Publisher="CN=Benjamin" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="2e54a5f6-5319-4dd2-9bad-1fe5290a0eeb" PhonePublisherId="1b03f58e-5a39-414f-9324-2cab834debfd" />
<Properties>
<DisplayName>MusicTrackerPhone</DisplayName>
<PublisherDisplayName>Benjamin</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Prerequisites>
<OSMinVersion>6.3.1</OSMinVersion>
<OSMaxVersionTested>6.3.1</OSMaxVersionTested>
</Prerequisites>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="x2e54a5f6y5319y4dd2y9bady1fe5290a0eebx" Executable="AGHost.exe" EntryPoint="MainPage.xaml">
<m3:VisualElements DisplayName="MusicTrackerPhone" Square150x150Logo="Assets\SquareTile150x150.png" Square44x44Logo="Assets\Logo.png" Description="MusicTrackerPhone" ForegroundText="light" BackgroundColor="#464646">
<m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png">
</m3:DefaultTile>
<m3:SplashScreen Image="Assets\Splashscreen.png" />
</m3:VisualElements>
<Extensions>
<Extension Category="windows.fileTypeAssociation">
<FileTypeAssociation Name=".mp3">
<DisplayName>mp3</DisplayName>
<SupportedFileTypes>
<FileType ContentType="audio/mp3">.mp3</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="musicLibrary" />
<Capability Name="removableStorage" />
</Capabilities>
<Extensions>
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>AgHostSvcs.dll</Path>
<ActivatableClass ActivatableClassId="AgHost.BackgroundTask" ThreadingModel="both" />
</InProcessServer>
</Extension>
</Extensions>
</Package>
答案 0 :(得分:4)
奇怪的是(它仅涉及WP8.1 Silverlight),但正如我所检查的那样,可以通过xaml编辑器添加 FileType Associations :右键单击 package.appxmanifest < / em>文件,选择查看代码F7 。在<Extensions>
中找到<Application
部分(可能在</m3:VisualElements>
之后)并手动添加第一个文件类型关联:
</m3:VisualElements>
<Extensions>
<Extension Category="windows.fileTypeAssociation">
<FileTypeAssociation Name=".mp3">
<DisplayName>mp3</DisplayName>
<SupportedFileTypes>
<FileType ContentType="audio/mp3">.mp3</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extension>
// other extensions
</Extensions>
添加第一个,下一个 FileType Associations 后,您将能够通过GUI添加 - 从现在起,它将在支持的声明中提供。
答案 1 :(得分:0)
无需在文件关联中添加.mp3,它是保留的,将被忽略。您只能访问不在手机内存上的SD卡库。