• 背水一战 Windows 10 (88)


    [源码下载]


    背水一战 Windows 10 (88) - 文件系统: 操作文件夹和文件



    作者:webabcd


    介绍
    背水一战 Windows 10 之 文件系统

    • 创建文件夹,重命名文件夹,删除文件夹,在指定的文件夹中创建文件
    • 创建文件,复制文件,移动文件,重命名文件,删除文件
    • 打开文件,获取指定的本地 uri 的文件,通过 StreamedFileDataRequest 或远程 uri 创建文件或替换文件



    示例
    1、演示如何创建文件夹,重命名文件夹,删除文件夹,在指定的文件夹中创建文件
    FileSystem/FolderOperation.xaml

    <Page
        x:Class="Windows10.FileSystem.FolderOperation"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.FileSystem"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10">
    
                <TextBlock Name="lblMsg" Margin="5" />
    
                <Button Name="btnCreateFolder" Content="创建文件夹" Click="btnCreateFolder_Click" Margin="5" />
    
                <Button Name="btnRenameFolder" Content="重命名文件夹" Click="btnRenameFolder_Click" Margin="5" />
    
                <Button Name="btnDeleteFolder" Content="删除文件夹" Click="btnDeleteFolder_Click" Margin="5" />
    
                <Button Name="btnCreateFile" Content="在指定的文件夹中创建文件" Click="btnCreateFile_Click" Margin="5" />
    
            </StackPanel>
        </Grid>
    </Page>

    FileSystem/FolderOperation.xaml.cs

    /*
     * 演示如何创建文件夹,重命名文件夹,删除文件夹,在指定的文件夹中创建文件
     * 
     * StorageFolder - 文件夹操作类
     *     public IAsyncOperation<StorageFile> CreateFileAsync(string desiredName);
     *     public IAsyncOperation<StorageFile> CreateFileAsync(string desiredName, CreationCollisionOption options);
     *     public IAsyncOperation<StorageFolder> CreateFolderAsync(string desiredName);
     *     public IAsyncOperation<StorageFolder> CreateFolderAsync(string desiredName, CreationCollisionOption options);
     *     public IAsyncAction RenameAsync(string desiredName);
     *     public IAsyncAction RenameAsync(string desiredName, NameCollisionOption option);
     *     public IAsyncAction DeleteAsync();
     *     public IAsyncAction DeleteAsync(StorageDeleteOption option);
     * 
     * CreationCollisionOption
     *     GenerateUniqueName - 存在则在名称后自动追加编号
     *     ReplaceExisting - 存在则替换
     *     FailIfExists - 存在则抛出异常
     *     OpenIfExists - 存在则返回现有项
     * 
     * NameCollisionOption
     *     GenerateUniqueName - 存在则在名称后自动追加编号
     *     ReplaceExisting - 存在则替换
     *     FailIfExists - 存在则抛出异常
     * 
     * StorageDeleteOption
     *     Default - 默认行为
     *     PermanentDelete - 永久删除(不会移至回收站)
     *     
     *     
     * 注:以上接口不再一一说明,看看下面的示例代码就基本都明白了
     */
    
    using System;
    using Windows.Storage;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    
    namespace Windows10.FileSystem
    {
        public sealed partial class FolderOperation : Page
        {
            private StorageFolder _myFolder = null;
    
            public FolderOperation()
            {
                this.InitializeComponent();
            }
    
            // 创建文件夹
            private async void btnCreateFolder_Click(object sender, RoutedEventArgs e)
            {
                StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary);
                _myFolder = await picturesFolder.CreateFolderAsync("MyFolder", CreationCollisionOption.OpenIfExists);
    
                // 创建文件夹时也可以按照下面这种方式创建多级文件夹 
                // _myFolder = await picturesFolder.CreateFolderAsync(@"MyFoldersubsubsub", CreationCollisionOption.OpenIfExists);
    
                lblMsg.Text = "创建了文件夹";
            }
    
            // 重命名文件夹
            private async void btnRenameFolder_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    await _myFolder.RenameAsync("MyFolder_Rename", NameCollisionOption.FailIfExists);
                    lblMsg.Text = "重命名了文件夹";
                }
            }
    
            // 删除文件夹
            private async void btnDeleteFolder_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    await _myFolder.DeleteAsync(StorageDeleteOption.Default);
                    lblMsg.Text = "删除了文件夹";
    
                    _myFolder = null;
                }
            }
    
            // 在指定的文件夹中创建文件
            private async void btnCreateFile_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    StorageFile myFile = await _myFolder.CreateFileAsync("MyFile", CreationCollisionOption.OpenIfExists);
    
                    // 创建文件时也可以按照下面这种方式指定子目录(目录不存在的话会自动创建)
                    // StorageFile myFile = await _myFolder.CreateFileAsync(@"folder1folder2MyFile", CreationCollisionOption.OpenIfExists);
    
                    lblMsg.Text = "在指定的文件夹中创建了文件";
                }
            }
        }
    }


    2、演示如何创建文件,复制文件,移动文件,重命名文件,删除文件
    FileSystem/FileOperation.xaml

    <Page
        x:Class="Windows10.FileSystem.FileOperation"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.FileSystem"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10">
    
                <TextBlock Name="lblMsg" Margin="5" />
    
                <Button Name="btnCreateFolder" Content="创建文件夹" Click="btnCreateFolder_Click" Margin="5" />
                
                <Button Name="btnCreateFile" Content="在指定的文件夹中创建文件" Click="btnCreateFile_Click" Margin="5" />
    
                <Button Name="btnCopyFile" Content="复制文件" Click="btnCopyFile_Click" Margin="5" />
    
                <Button Name="btnMoveFile" Content="移动文件" Click="btnMoveFile_Click" Margin="5" />
    
                <Button Name="btnRenameFile" Content="重命名文件" Click="btnRenameFile_Click" Margin="5" />
    
                <Button Name="btnDeleteFile" Content="删除文件" Click="btnDeleteFile_Click" Margin="5" />
    
            </StackPanel>
        </Grid>
    </Page>

    FileSystem/FileOperation.xaml.cs

    /*
     * 演示如何创建文件,复制文件,移动文件,重命名文件,删除文件
     * 
     * StorageFile - 文件操作类
     *     public IAsyncOperation<StorageFile> CopyAsync(IStorageFolder destinationFolder);
     *     public IAsyncOperation<StorageFile> CopyAsync(IStorageFolder destinationFolder, string desiredNewName);
     *     public IAsyncOperation<StorageFile> CopyAsync(IStorageFolder destinationFolder, string desiredNewName, NameCollisionOption option);
     *     public IAsyncAction CopyAndReplaceAsync(IStorageFile fileToReplace);
     *     public IAsyncAction MoveAsync(IStorageFolder destinationFolder);
     *     public IAsyncAction MoveAsync(IStorageFolder destinationFolder, string desiredNewName);
     *     public IAsyncAction MoveAsync(IStorageFolder destinationFolder, string desiredNewName, NameCollisionOption option);
     *     public IAsyncAction MoveAndReplaceAsync(IStorageFile fileToReplace);
     *     public IAsyncAction RenameAsync(string desiredName);
     *     public IAsyncAction RenameAsync(string desiredName, NameCollisionOption option);
     *     public IAsyncAction DeleteAsync();
     *     public IAsyncAction DeleteAsync(StorageDeleteOption option);
     * 
     * CreationCollisionOption
     *     GenerateUniqueName - 存在则在名称后自动追加编号
     *     ReplaceExisting - 存在则替换
     *     FailIfExists - 存在则抛出异常
     *     OpenIfExists - 存在则返回现有项
     * 
     * NameCollisionOption
     *     GenerateUniqueName - 存在则在名称后自动追加编号
     *     ReplaceExisting - 存在则替换
     *     FailIfExists - 存在则抛出异常
     * 
     * StorageDeleteOption
     *     Default - 默认行为
     *     PermanentDelete - 永久删除(不会移至回收站)
     *     
     *     
     * 注:以上接口不再一一说明,看看下面的示例代码就基本都明白了
     */
    
    using System;
    using Windows.Storage;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    
    namespace Windows10.FileSystem
    {
        public sealed partial class FileOperation : Page
        {
            private StorageFolder _myFolder = null;
    
            public FileOperation()
            {
                this.InitializeComponent();
            }
    
            // 创建文件夹
            private async void btnCreateFolder_Click(object sender, RoutedEventArgs e)
            {
                StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary);
                _myFolder = await picturesFolder.CreateFolderAsync("MyFolder", CreationCollisionOption.OpenIfExists);
    
                // 创建文件夹时也可以按照下面这种方式创建多级文件夹 
                // _myFolder = await picturesFolder.CreateFolderAsync(@"MyFoldersubsubsub", CreationCollisionOption.OpenIfExists);
    
                lblMsg.Text = "创建了文件夹";
            }
    
            // 在指定的文件夹中创建文件
            private async void btnCreateFile_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    StorageFile myFile = await _myFolder.CreateFileAsync("MyFile", CreationCollisionOption.OpenIfExists);
    
                    // 创建文件时也可以按照下面这种方式指定子目录(目录不存在的话会自动创建)
                    // StorageFile myFile = await _myFolder.CreateFileAsync(@"folder1folder2MyFile", CreationCollisionOption.OpenIfExists);
    
                    lblMsg.Text = "在指定的文件夹中创建了文件";
                }
            }
    
            // 复制文件
            private async void btnCopyFile_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    try
                    {
                        StorageFile myFile = await _myFolder.GetFileAsync("MyFile");
                        StorageFile myFile_copy = await myFile.CopyAsync(_myFolder, "MyFile_Copy", NameCollisionOption.ReplaceExisting);
                        lblMsg.Text = "复制了文件";
                    }
                    catch (Exception ex)
                    {
                        lblMsg.Text = ex.ToString();
                    }
                }
            }
    
            // 移动文件
            private async void btnMoveFile_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    try
                    {
                        StorageFile myFile = await _myFolder.GetFileAsync("MyFile");
                        await myFile.MoveAsync(_myFolder, "MyFile_Move", NameCollisionOption.ReplaceExisting);
                        lblMsg.Text = "移动了文件";
                    }
                    catch (Exception ex)
                    {
                        lblMsg.Text = ex.ToString();
                    }
                }
            }
    
            // 重命名文件
            private async void btnRenameFile_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    try
                    {
                        StorageFile myFile = await _myFolder.GetFileAsync("MyFile_Move");
                        await myFile.RenameAsync("MyFile_Rename", NameCollisionOption.ReplaceExisting);
                        lblMsg.Text = "重命名了文件";
                    }
                    catch (Exception ex)
                    {
                        lblMsg.Text = ex.ToString();
                    }
                }
            }
    
            // 删除文件
            private async void btnDeleteFile_Click(object sender, RoutedEventArgs e)
            {
                if (_myFolder != null)
                {
                    try
                    {
                        StorageFile myFile = await _myFolder.GetFileAsync("MyFile_Rename");
                        await myFile.DeleteAsync(StorageDeleteOption.Default);
                        lblMsg.Text = "删除了文件";
                    }
                    catch (Exception ex)
                    {
                        lblMsg.Text = ex.ToString();
                    }
                }
            }
        }
    }


    3、演示如何打开文件,获取指定的本地 uri 的文件,通过 StreamedFileDataRequest 或远程 uri 创建文件或替换文件
    FileSystem/FileOperation2.xaml

    <Page
        x:Class="Windows10.FileSystem.FileOperation2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.FileSystem"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10">
    
                <Image Name="image1" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5" />
                <Image Name="image2" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5" />
                <Image Name="image3" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5" />
                <Image Name="image4" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5" />
                <Image Name="image5" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5" />
    
                <Button Name="btnGetFile" Content="获取指定的本地 uri 的文件" Click="btnGetFile_Click" Margin="5" />
                <Button Name="btnCreateFile1" Content="通过 StreamedFileDataRequest 创建文件" Click="btnCreateFile1_Click" Margin="5" />
                <Button Name="btnCreateFile2" Content="通过远程 uri 创建文件" Click="btnCreateFile2_Click" Margin="5" />
                <Button Name="btnReplaceFile1" Content="通过 StreamedFileDataRequest 替换文件" Click="btnReplaceFile1_Click" Margin="5" />
                <Button Name="btnReplaceFile2" Content="通过远程 uri 替换文件" Click="btnReplaceFile2_Click" Margin="5" />
    
            </StackPanel>
        </Grid>
    </Page>

    FileSystem/FileOperation2.xaml.cs

    /*
     * 演示如何打开文件,获取指定的本地 uri 的文件,通过 StreamedFileDataRequest 或远程 uri 创建文件或替换文件
     * 
     * StorageFile - 文件操作类
     *     public IAsyncOperation<IRandomAccessStream> OpenAsync(FileAccessMode accessMode) - 打开文件,可以指定是只读方式还是读写方式,返回 IRandomAccessStream 流
     *     public IAsyncOperation<IRandomAccessStreamWithContentType> OpenReadAsync() - 以只读方式打开文件,返回 IRandomAccessStreamWithContentType 流
     *     public IAsyncOperation<IInputStream> OpenSequentialReadAsync() - 以只读方式打开文件,返回 IInputStream 流
     *     
     *     public static IAsyncOperation<StorageFile> GetFileFromApplicationUriAsync(Uri uri);
     *     public static IAsyncOperation<StorageFile> CreateStreamedFileAsync(string displayNameWithExtension, StreamedFileDataRequestedHandler dataRequested, IRandomAccessStreamReference thumbnail);
     *     public static IAsyncOperation<StorageFile> ReplaceWithStreamedFileAsync(IStorageFile fileToReplace, StreamedFileDataRequestedHandler dataRequested, IRandomAccessStreamReference thumbnail);
     *     public static IAsyncOperation<StorageFile> CreateStreamedFileFromUriAsync(string displayNameWithExtension, Uri uri, IRandomAccessStreamReference thumbnail);
     *     public static IAsyncOperation<StorageFile> ReplaceWithStreamedFileFromUriAsync(IStorageFile fileToReplace, Uri uri, IRandomAccessStreamReference thumbnail);
     *     
     *     
     * 注:以上接口不再一一说明,看看下面的示例代码就基本都明白了
     */
    
    using System;
    using Windows.Storage;
    using Windows.Storage.Streams;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Media.Imaging;
    
    namespace Windows10.FileSystem
    {
        public sealed partial class FileOperation2 : Page
        {
            public FileOperation2()
            {
                this.InitializeComponent();
            }
            
            private async void btnGetFile_Click(object sender, RoutedEventArgs e)
            {
                // 获取指定的本地 uri 的文件
                StorageFile storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/hololens.jpg"));
                // 只读方式打开文件,返回 IRandomAccessStream 流
                IRandomAccessStream stream = await storageFile.OpenReadAsync();
    
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(stream);
                image1.Source = bitmapImage;
            }
    
            private async void btnCreateFile1_Click(object sender, RoutedEventArgs e)
            {
                // 通过 StreamedFileDataRequest 创建文件
                StorageFile storageFile = await StorageFile.CreateStreamedFileAsync("GetFileFromApplicationUriAsync.jpg", StreamHandler, null);
                // 只读方式打开文件,返回 IRandomAccessStream 流
                IRandomAccessStream stream = await storageFile.OpenReadAsync();
    
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(stream);
                image2.Source = bitmapImage;
            }
    
            private async void btnCreateFile2_Click(object sender, RoutedEventArgs e)
            {
                Uri uri = new Uri("http://images.cnblogs.com/mvpteam.gif", UriKind.Absolute);
                // 通过远程 uri 创建文件
                StorageFile storageFile = await StorageFile.CreateStreamedFileFromUriAsync("CreateStreamedFileFromUriAsync.gif", uri, null);
                // 只读方式打开文件,返回 IRandomAccessStream 流
                IRandomAccessStream stream = await storageFile.OpenReadAsync();
    
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(stream);
                image3.Source = bitmapImage;
            }
           
            private async void btnReplaceFile1_Click(object sender, RoutedEventArgs e)
            {
                StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary);
                // 需要被替换的文件
                StorageFile storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(@"webabcdTestGetFolderForUserAsync.jpg", CreationCollisionOption.ReplaceExisting);
    
                // 通过 StreamedFileDataRequest 替换指定的文件,然后通过返回的 newFile 对象操作替换后的文件
                StorageFile newFile = await StorageFile.ReplaceWithStreamedFileAsync(storageFile, StreamHandler, null);
                // 只读方式打开文件,返回 IRandomAccessStream 流
                IRandomAccessStream stream = await newFile.OpenReadAsync();
    
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(stream);
                image4.Source = bitmapImage;
            }
            
            private async void btnReplaceFile2_Click(object sender, RoutedEventArgs e)
            {
                StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary);
                // 需要被替换的文件
                StorageFile storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(@"webabcdTestCreateStreamedFileFromUriAsync.jpg", CreationCollisionOption.ReplaceExisting);
    
                Uri uri = new Uri("http://images.cnblogs.com/mvpteam.gif", UriKind.Absolute);
                // 通过远程 uri 替换指定的文件,然后通过返回的 newFile 对象操作替换后的文件
                StorageFile newFile = await StorageFile.ReplaceWithStreamedFileFromUriAsync(storageFile, uri, null);
                // 只读方式打开文件,返回 IRandomAccessStream 流
                IRandomAccessStream stream = await newFile.OpenReadAsync();
    
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(stream);
                image5.Source = bitmapImage;
            }
    
    
            // 一个 StreamedFileDataRequestedHandler
            private async void StreamHandler(StreamedFileDataRequest stream)
            {
                StorageFile storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///assets/hololens.jpg"));
                IInputStream inputStream = await storageFile.OpenSequentialReadAsync();
                await RandomAccessStream.CopyAndCloseAsync(inputStream, stream);
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    C 语言定义
    一次系统磁盘异常使用100%的处理
    supervisord 安装、配置体验
    uva 211(dfs)
    poj1651
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    nyoj-746
    Codeforces Round #308 (Div. 2)----C. Vanya and Scales
    long long 与 _int64
    石子归并问题(nyoj737)
  • 原文地址:https://www.cnblogs.com/webabcd/p/9181335.html
Copyright © 2020-2023  润新知