首页 > 代码库 > Win8.1应用开发之文件操作
Win8.1应用开发之文件操作
在操作文件之前,先对应用的应用功能声明进行设定。用户通过C#(非UI)对win8.1上的文件进行访问,只能局限于图片,音乐,视频和文档四个文件夹。而通过文件选取器则能访问到整个系统的文件。
(一)应用功能声明
对于win8应用商店应用,打开Package.appxmanifest文件,点击“功能”选项卡,勾选“音乐库”,“图片库”和“视频库”,这样你就可以通过代码对这里面的文件和文件夹进行操作:
音乐
musicLibrary 许可范围可提供对用户音乐的编程访问能力,让应用无需用户交互即可枚举和访问库中的所有文件。此许可范围通常用在需要访问整个音乐库的自动唱片点唱机应用中。
file picker 提供了一种强大的 UI 机制,让用户可以打开要通过某个应用处理的文件。 仅当应用需要进行编程访问,而使用 file picker 无法实现编程访问时,才应声明 musicLibrary 许可范围。
图片
picturesLibrary 许可范围可提供对用户图片的编程访问能力,让应用无需用户交互即可枚举和访问库中的所有文件。此许可范围通常用在需要访问整个图片库的照片播放应用中。
file picker 提供了一种强大的 UI 机制,让用户可以打开要通过某个应用处理的文件。 仅当应用需要进行编程访问,而使用 file picker 无法实现编程访问时,才应声明 picturesLibrary 许可范围。
视频
videosLibrary 许可范围可提供对用户视频的编程访问能力,让应用无需用户交互即可枚举和访问库中的所有文件。此许可范围通常用在需要访问整个视频库的电影播放应用中。
file picker 提供了一种强大的 UI 机制,让用户可以打开要通过某个应用处理的文件。 仅当应用需要进行编程访问,而使用 file picker 无法实现编程访问时,才应声明 videosLibrary 许可范围。
对于“文档"文件夹的访问,要根据VS提供的出错信息进行自动设置,之后要设置文件关联,按照提示做即可。
(二)文件选取器
UI形式,可访问整个系统上的文件。使用文件选取器通过让用户选取文件和文件夹来访问文件和文件夹。你可以使用 FileOpenPicker 类获取对文件的访问,使用 FolderPicker 获取对文件夹的访问。通过文件选取器,你的应用可以在用户的整个系统上获得对文件和文件夹的访问。当你调用文件选取器时,用户可以浏览其系统并选择文件(或文件夹)以访问和保存。在用户选取文件或文件夹之后,你的应用将这些选取作为 StorageFile 和 StorageFolder 对象进行接收。接着你的应用可以通过使用这些对象在选取的文件和文件夹上操作。
if (rootPage.EnsureUnsnapped()) { FileOpenPicker openPicker = new FileOpenPicker(); openPicker.ViewMode = PickerViewMode.Thumbnail; openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; openPicker.FileTypeFilter.Add(".jpg"); openPicker.FileTypeFilter.Add(".jpeg"); openPicker.FileTypeFilter.Add(".png"); StorageFile file = await openPicker.PickSingleFileAsync(); if (file != null) { // Application now has read/write access to the picked file OutputTextBlock.Text = "Picked photo: " + file.Name; } else { OutputTextBlock.Text = "Operation cancelled."; } }
(三)通过编程进行文件操作
类KnownFolders 提供对其中包含用户内容的常见位置的访问。 这包括用户的本地库(如照片、文档、音乐或视频)中的内容、可移动设备、家庭组以及媒体服务器设备。对于访问磁盘文件来说,这只局限于图片,音乐,文档和视频四个文件夹。
示例1:将服务器上的一个文件下载到“图片”文件夹下的一个子文件(需动态创建)中
string dync_IPv4 = "211.87.237.23"; string port = "8081"; string UrlJsonPath = "json/Images.txt"; //string UrlJsonPath = "Image/694021692/1214936171.png"; string uri = "http://" + dync_IPv4 + ":" + port + "/" + UrlJsonPath; System.Diagnostics.Debug.WriteLine(uri); string filename = "ImagesUri.txt"; //string filename = "DAXIA.png"; var rass = RandomAccessStreamReference.CreateFromUri(new Uri(uri)); IRandomAccessStream inputStream = await rass.OpenReadAsync(); Stream input = WindowsRuntimeStreamExtensions.AsStreamForRead(inputStream.GetInputStreamAt(0)); try { //获取图片扩展名的Guid StorageFolder folder = KnownFolders.PicturesLibrary; //System.Diagnostics.Debug.WriteLine(folder.Path); //Creates a new file in the current folder, and specifies what to do if a file with the same name already exists in the current folder. StorageFolder childFolder = await folder.CreateFolderAsync("WhereWeGo"); StorageFile outputFile = await childFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); //StorageFile outputFile = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); System.Diagnostics.Debug.WriteLine(outputFile.Path); using (IRandomAccessStream outputStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite)) { Stream output = WindowsRuntimeStreamExtensions.AsStreamForWrite(outputStream.GetOutputStreamAt(0)); await input.CopyToAsync(output); output.Dispose(); input.Dispose(); } } catch (Exception) { System.Diagnostics.Debug.WriteLine("adfasd"); }
示例2:接示例1,将下载的文件读出来
// 在指定的目录下获取指定的文件 StorageFolder storageFolder = KnownFolders.PicturesLibrary; StorageFolder folder = await storageFolder.GetFolderAsync("WhereWeGo"); StorageFile storageFile = await folder.GetFileAsync("ImagesUri.txt"); // StorageFile storageFile = await storageFolder.GetFileAsync("ImagesUri.txt"); if (storageFile != null) { // 获取指定的文件中的文本内容 string textContent = await FileIO.ReadTextAsync(storageFile, Windows.Storage.Streams.UnicodeEncoding.Utf8); System.Diagnostics.Debug.WriteLine(textContent); }