`
lindexi-gd
  • 浏览: 139705 次
社区版块
存档分类
最新评论

win10 UWP读写文件

    博客分类:
  • UWP
UWP 
阅读更多

C# uwp应用的文件读写最常见错误就是没有权限。
而最简单的方法是对已知的文件路径进行访问
已知的文件路径常见的是自身的路径
权限这个和之前不同,UWP读写文件多用StorageFile来读写文件
[TOC]
StorageFile没有直接的打开一个文件的做法,而是通过StorageFolder创建,打开文件来进行。
下面代码需要using Windows.Storage;

获取应用目录的文件夹

StorageFolder folder;
            folder = ApplicationData.Current.LocalFolder;

创建文件

获取后,这里不需要权限,可以直接创建文件

folder.CreateFileAsync(file_name , CreationCollisionOption.ReplaceExisting);

其中ApplicationData.CurrentCurrent的值可以是 LocalCacheFolder 本地临时文件夹,LocalFolder 本地文件夹,LocalSettings 本地设置,RoamingFolder 漫游文件夹,RoamingSettings 漫游设置
创建文件的时候可以选择,如果存在了文件的选择CreationCollisionOption里ReplaceExisting 如果文件或文件夹已存在,则替换现有的项
FailIfExists 默认值 如果文件或文件夹已存在,则引发类型为 System.Exception 的异常。
还有用的比较少的选项。

创建文件夹

创建文件夹和创建文件也是一样
先获取本地的文件夹StorageFolder folder;
folder = ApplicationData.Current.LocalFolder;

创建文件夹

 folder.CreateFolderAsync(folder_name,CreationCollisionOption.ReplaceExisting);    

为了显示已经做的,我做了一个函数来显示void notify(string str)
把做出来的东西显示出来

读写文件

把创建的文件存为file_demonstration,对file_demonstration读写
可以把这个新的东西变为熟悉的
需要using System.IO;

Stream file = await file_demonstration.OpenStreamForWriteAsync()

这样读写就很简单
写文件代码

            using (Stream file = await file_demonstration.OpenStreamForWriteAsync())
            {
                using (StreamWriter write = new StreamWriter(file))
                {
                    write.Write("写入");
                }
            }

读文件

            string s;
            using (Stream file = await file_demonstration.OpenStreamForReadAsync())
            {
                using (StreamReader read = new StreamReader(file))
                {
                    s = read.ReadToEnd();
                }                
            }

微软官方的读写文件
using Windows.Storage.Streams;
写文件

            using (StorageStreamTransaction transaction = await file_demonstration.OpenTransactedWriteAsync())
            {
                using (DataWriter dataWriter = new DataWriter(transaction.Stream))
                {
                    dataWriter.WriteString(str);
                    transaction.Stream.Size = await dataWriter.StoreAsync();
                    await transaction.CommitAsync();
                }
            }

读文件

using (IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read))
            {
                using (DataReader dataReader = new DataReader(readStream))
                {
                    UInt64 size = readStream.Size;
                    if (size <= UInt32.MaxValue)
                    {
                        UInt32 numBytesLoaded = await dataReader.LoadAsync((UInt32)size);
                        string fileContent = dataReader.ReadString(numBytesLoaded);
                    }
                }
            }

别的文件夹

我们用软件安装目录的时候还是比较少,我们需要用到的文件夹还有很多,现在下面就有一些系统文件夹可以使用
图片库
选图片库可以使用folder_demonstration = KnownFolders.PicturesLibrary;
在生成前在清单请求权限
配置
在清单请求图片
除了图片库还有很多,在KnownFolders可以看到,使用前需要请求权限。
还有下载文件DownloadsFolder
folder_demonstration = DownloadsFolder.CreateFolderAsync(folder_name);

选取文件

系统给的我们有时候还需要用户选的文件
选取文件需要Windows.Storage.Pickers.FileOpenPicker,使用picker.PickSingleFileAsync()来出现选择界面
在使用picker.PickSingleFileAsync()要设置后缀,选择文件的后缀picker.FileTypeFilter.Add(".txt");
一般我们有推荐第一次使用选择进入的文件夹picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;

选取文件夹和选取文件一样

Windows.Storage.Pickers.FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
            folderPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
            folderPicker.FileTypeFilter.Add(".txt");
            StorageFolder folder = await folderPicker.PickSingleFolderAsync();
            if (folder != null)
            {
                notify("选择" + folder.Name);
                folder_demonstration = folder;
            }

全部代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;

namespace file
{
    public class model
    {
        public model()
        {
            //C# uwp应用的文件读写最常见错误
            //就是没有权限。
            //而最简单的方法是对已知的文件
            //路径进行访问
            //自身的路径
            ce();

        }
        /// <summary>
        /// 结果
        /// </summary>
        public string result
        {
            set
            {
                _result.Add(value);
            }
            get
            {
                StringBuilder t = new StringBuilder();
                foreach (string s in _result)
                {
                    t.Append(s);
                }
                return t.ToString();
            }
        }
        public async void ce()
        {
            //创建文件
            await create_ApplicationData("测试.txt");
            //创建文件夹
            await folder_ApplicationData("在安装的路径创建不需要权限");

            //读写文件和以前一样
            await write_ApplicationData();
            await read_ApplicationData();

            //如果要读写别的地方的文件,可以用
            //folder_demonstration = KnownFolders.PicturesLibrary;
            //要在清单请求权限
            //DownloadsFolder 下载文件夹这里也可以
            //folder_demonstration = DownloadsFolder.CreateFolderAsync(folder_name);
            //也可以让用户选


        }
        private StorageFile file_demonstration;//UWP 采用StorageFile来读写文件
        private StorageFolder folder_demonstration;//folder来读写文件夹
        /// <summary>
        /// 自身路径创建文件
        /// </summary>
        /// <param name="file_name">要创建文件名字</param>
        /// <returns>已经创建的文件</returns>
        public async Task create_ApplicationData(string file_name)
        {
            StorageFolder folder;
            folder = ApplicationData.Current.LocalFolder;
            //Current的值可以是
            //LocalCacheFolder 本地临时文件夹
            //LocalFolder 本地文件夹
            //LocalSettings 本地设置
            //RoamingFolder 漫游文件夹
            //RoamingSettings 漫游设置

            file_demonstration = await folder.CreateFileAsync(file_name , CreationCollisionOption.ReplaceExisting);
            //CreationCollisionOption 可以选择           
            //     如果文件或文件夹已存在,则自动为指定名称的基础追加一个编号。例如,如果 MyFile.txt 已存在,则新文件名为 MyFile (2).txt。如果 MyFolder
            //     已存在,则新文件夹名为 MyFolder (2)。
            //GenerateUniqueName         
            //ReplaceExisting 如果文件或文件夹已存在,则替换现有的项。            
            //FailIfExists 默认值 如果文件或文件夹已存在,则引发类型为 System.Exception 的异常。        
            //OpenIfExists 如果文件或文件夹已存在,则返回现有的项。

            notify("创建文件成功,文件路径" + file_demonstration.Path);
        }

        /// <summary>
        /// 自身路径创建文件夹
        /// </summary>
        /// <param name="file_name">要创建文件夹名字</param>
        /// <returns>已经创建的文件夹</returns>
        public async Task folder_ApplicationData(string folder_name)
        {
            StorageFolder folder;
            folder = ApplicationData.Current.LocalFolder;
            folder_demonstration = await folder.CreateFolderAsync(folder_name , CreationCollisionOption.ReplaceExisting);
            notify("创建文件夹成功,文件夹路径" + folder_demonstration.Path);
        }

        /// <summary>
        /// 对自身路径进行文件读写
        /// </summary>
        public async Task write_ApplicationData()
        {
            using (Stream file = await file_demonstration.OpenStreamForWriteAsync())
            {
                using (StreamWriter write = new StreamWriter(file))
                {
                    write.Write("写入");
                }
            }

            //using (StorageStreamTransaction transaction = await file_demonstration.OpenTransactedWriteAsync())
            //{
            //    using (DataWriter dataWriter = new DataWriter(transaction.Stream))
            //    {
            //        dataWriter.WriteString(str);
            //        transaction.Stream.Size = await dataWriter.StoreAsync();
            //        await transaction.CommitAsync();
            //    }
            //}

            notify("写入文件成功");
        }
        /// <summary>
        /// 读文件
        /// </summary>
        public async Task read_ApplicationData()
        {
            string s;
            using (Stream file = await file_demonstration.OpenStreamForReadAsync())
            {
                using (StreamReader read = new StreamReader(file))
                {
                    s = read.ReadToEnd();
                }
            }
            notify("读文件\"" + s + "\"");
        }
        public async Task file_open()
        {
            Windows.Storage.Pickers.FileOpenPicker picker = new Windows.Storage.Pickers.FileOpenPicker();
            //显示方式
            picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
            //选择最先的位置
            picker.SuggestedStartLocation =
                Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
            //后缀名
            picker.FileTypeFilter.Add(".txt");

            StorageFile file = await picker.PickSingleFileAsync();
            if (file != null)
            {               
                notify("选择 " + file.Name);
                file_demonstration = file;
            }
        }
        public async Task folder_open()
        {
            Windows.Storage.Pickers.FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
            folderPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
            folderPicker.FileTypeFilter.Add(".txt");
            StorageFolder folder = await folderPicker.PickSingleFolderAsync();
            if (folder != null)
            {
                notify("选择" + folder.Name);
                folder_demonstration = folder;
            }
        }

        private List<string> _result = new List<string>();
        private void notify(string str)
        {
            _result.Add(str + "\r\n");
        }

    }
}

https://code.csdn.net/lindexi_gd/uwp_write_read_file

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    BleScan_连接_Windows编程_ble_win10ble开发_win10ble_

    在实际开发中,使用Windows 10的通用Windows平台(Universal Windows Platform, UWP)API,开发者可以方便地实现BLE设备的发现、连接、读写操作。例如,通过`Windows.Devices.Bluetooth.GenericAttributeProfile....

    UWP-Demo:UWP桌面应用程序的演示

    在“UWP-Demo”中,可能包含了对某些特定API的调用,如读写文件、访问网络资源或播放音频视频。此外,UWP还支持集成Windows服务,如Live Tile更新、通知推送等。 **5. UWP的打包和发布** UWP应用可以通过Microsoft ...

    Win32开发教程.zip

    Win32 API(Application Programming Interface)是微软Windows操作系统的...不过,现代的Windows开发更多地转向了.NET Framework和UWP(Universal Windows Platform),但Win32 API仍然是理解Windows编程基础的关键。

    新编WIN32API大全

    7. **文件操作**:介绍CreateFile、ReadFile、WriteFile等函数,用于读写文件,以及文件流和文件映射的概念。 8. **注册表操作**:讲解RegOpenKeyEx、RegSetValueEx等函数,用于存储和检索配置信息。 9. **错误...

    Win32 API大全

    6. **文件I/O**:包括文件的打开、关闭、读写等操作,如`CreateFile`打开或创建文件,`ReadFile`和`WriteFile`进行文件读写,`CloseHandle`关闭文件句柄。 7. **网络编程**:Win32 API提供了`Winsock`库,支持TCP/...

    win32背景图

    开发者可以通过调用这些API函数,实现与操作系统进行交互,包括创建窗口、处理用户输入、绘图、读写文件等。 2. **桌面背景图的概念** 桌面背景图,也称为壁纸,是用户登录Windows系统后看到的第一件事。它可以是...

    Win API的平台示例-main.rar Windows-universal-samples-main

    例如,访问网络或读写文件时,需要声明相应的权限。Win API提供了检查和请求权限的API,如RequestAccessAsync函数,确保应用在安全的环境中运行。 在跨设备兼容性方面,UWP的Win API提供了适应不同屏幕尺寸和输入...

    Win32 API 大全(网络版)

    - 随着.NET Framework、UWP(Universal Windows Platform)和WinRT(Windows Runtime)的出现,Win32 API的地位有所下降,但仍然是许多低级别编程和系统级任务不可或缺的部分。 总之,"Win32 API大全(网络版)"是一...

    Win32Api.zip

    4. 文件系统API:这部分API包括文件和目录的操作,如打开、关闭、读写、创建和删除等。它们使得开发者能够管理和访问本地磁盘上的数据。 5. 网络API:Win32 API包含了多种网络功能,如TCP/IP编程接口,使得开发者...

    Win32 API中文帮助文档及中文查询工具

    4. **文件操作**:提供读写文件、创建删除文件和目录的函数,如CreateFile、ReadFile、WriteFile等。 5. **进程和线程**:允许创建、管理和控制进程和线程,如CreateProcess、CreateThread、ExitThread等。 6. **...

    win32API中文

    5. **文件操作**:`CreateFile`、`ReadFile`和`WriteFile`等函数用于读写文件,`FindFirstFile`和`FindNextFile`用于目录遍历,`DeleteFile`和`MoveFile`则用于文件的删除和移动。 6. **内存管理**:`VirtualAlloc`...

    win32API大全

    可以通过编写小程序来熟悉API的使用,例如创建窗口、响应用户输入、读写文件等。同时,配合调试工具(如Visual Studio的调试器)可以帮助理解API的实际运行效果。 总之,《新编WIN32API大全》是学习和掌握Windows...

    Win32 API帮助文档

    例如ReadFile()和WriteFile()用于读写文件,GetAsyncKeyState()用于检测键盘状态。 4. 网络编程(Networking):包含网络通信相关的API,如socket接口,用于创建和管理TCP/IP连接。 5. 多线程编程(Multithreading...

    win下的编程

    5. **文件I/O**:`CreateFile`、`ReadFile`和`WriteFile`函数用于读写文件,`FindFirstFile`和`FindNextFile`用于文件搜索。 6. **注册表操作**:`RegOpenKeyEx`、`RegSetValueEx`和`RegCloseKey`用于读写注册表...

    win32API

    文件操作方面,`CreateFile`用于打开或创建文件,`ReadFile`和`WriteFile`用于读写文件内容。对于目录操作,有`CreateDirectory`和`RemoveDirectory`用于创建和删除目录,`SetCurrentDirectory`则用来切换当前工作...

    windows-win32-apiindex需要自取

    1. **文件和I/O操作**:支持基本的文件读写、路径操作等功能。 2. **数据库访问**:通过ODBC、OLE DB等接口与各种类型的数据库进行交互。 3. **卷管理**:提供对磁盘分区、卷的操作支持。 #### 九、图形和多媒体API...

    win32 api windows api

    它允许开发者创建和管理进程,分配内存,读写文件,以及使用系统定时器和同步机制。 4. **ADVAPI32.dll**:包含了安全和授权相关的函数,如登录审计、权限控制、注册表操作等。 5. **WS2_32.dll**:提供了网络编程...

    BlueTooth.rar

    Windows 10提供了通用Windows平台(UWP)API,支持BLE设备的连接、扫描和数据交换。开发者可以利用`Windows.Devices.Bluetooth`命名空间中的类来实现这些功能。 5. **低功耗蓝牙通信的步骤**: - **扫描**:首先,...

    使用密码子为UWP创建设置屏幕

    在UWP(Universal Windows Platform)应用开发中,创建一个用户友好的设置屏幕是提升用户体验的重要环节。...在Windows 10和UWP应用的开发中,掌握这种技巧无疑会增强你的开发能力,提供更好的用户体验。

    具有Win 10 IoT-Core RPI2的通用串行蓝牙-项目开发

    项目的文档“generic-serial-bluetooth-with-win-10-iot-core-rpi2-fcc4ca.pdf”可能详细阐述了这些步骤,包括可能出现的问题和解决方案,以及调试技巧。 总之,这个项目展示了如何利用Windows 10 IoT Core和通用...

Global site tag (gtag.js) - Google Analytics