-->

2017年01月

イメージを表示する部分は、[UWP] イメージ表示と同じ。ファイルを選択するところはFileOpenPickerを使う。

        private async void button1_Click(object sender, RoutedEventArgs e)
        {
            var picker = new FileOpenPicker();
            picker.FileTypeFilter.Add(".png");
            picker.FileTypeFilter.Add(".jpg");
            var file = await picker.PickSingleFileAsync();
            if(file == null)
            {
                return;
            }
            var bitmap = new BitmapImage();
            using (var stream = await file.OpenReadAsync())
            {
                await bitmap.SetSourceAsync(stream);
            }
            image.Source = bitmap;
        }
    }


このエントリーをはてなブックマークに追加

画像ファイルをプロジェクトに追加して、画面にイメージコントロールをはっ付けて、Sourceプロパティで追加した画像ファイルを指定する。と表示できる。
まー、あえて書くほどでもないな。
それよりも、どっかから取ってきた画像データを表示してみたい。

ここでは、アプリのインストールしたところのImages/image.pngを読み込んで表示する。

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            // アプリケーションのインストールフォルダからImages/image.pngを読み込む。
            var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Images/image.png"));
            var bitmap = new BitmapImage();
            using (var stream = await file.OpenReadAsync())
            {
                await bitmap.SetSourceAsync(stream);
            }
            image.Source = bitmap;
        }


このエントリーをはてなブックマークに追加

ローカルフォルダでファイルの読み書きを一応やってみる。

        // ローカルフォルダにファイルを作る。
        private async void button2_Click(object sender, RoutedEventArgs e)
        {
            ApplicationData appData = ApplicationData.Current;

            // ローカルフォルダにファイルを作る。
            StorageFile file = await appData.LocalFolder.CreateFileAsync("hoge.txt");
            try
            {
                // オープンして書き込む
                using (Stream stream = await file.OpenStreamForWriteAsync())
                {
                    using (StreamWriter sw = new StreamWriter(stream))
                    {
                        await sw.WriteLineAsync("hoge1");
                        await sw.WriteLineAsync("hoge2");
                        await sw.WriteLineAsync("hoge3");
                        await sw.WriteLineAsync("hoge4");
                    }
                }
            }
            catch (IOException ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

        // ローカルフォルダのファイルを読み込んでみる。
        private async void button3_Click(object sender, RoutedEventArgs e)
        {
            ApplicationData appData = ApplicationData.Current;

            try
            {
                // ローカルフォルダのファイルをオープン
                using (Stream stream = await appData.LocalFolder.OpenStreamForReadAsync("hoge.txt"))
                {
                    using (StreamReader sr = new StreamReader(stream))
                    {
                        String s;
                        while ((s = await sr.ReadLineAsync()) != null)
                        {
                            Debug.WriteLine(s);
                        }
                    }
                }
            }
            catch (IOException ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }


このエントリーをはてなブックマークに追加

NSHomeDirectory()でパスが取得できる。ここ以外へのファイルの保存などは制限される。
NSHomeDirectory()で得たパスを基点に用途ごとにフォルダが用意されていて、NSSearchPathForDirectoriesInDomains()で取得できる。

    @IBAction func buttonClick(_ sender: UIButton) {
        // アプリケーションホームディレクトリ
        print(NSHomeDirectory())
        // ドキュメントディレクトリ
        // FileManager.SearchPathDirectoryやFileManager.SearchPathDomainMaskは省略できる。
        print(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0])
        // キャッシュディレクトリ
        print(NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0])
        // テンポラリディレクトリ
        print(NSTemporaryDirectory())
    }


このエントリーをはてなブックマークに追加

まず、アプリケーションをインストールしたフォルダを取得する。

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            // アプリケーションのインストールフォルダを取得
            StorageFolder storage = Windows.ApplicationModel.Package.Current.InstalledLocation;

            Debug.WriteLine(storage.Path);

            // ファイル一覧を表示
            var list = await storage.GetItemsAsync();
            foreach(var item in list)
            {
                Debug.WriteLine(item.Name);
            }
        }

アプリケーションのデータフォルダを取得する。ApplicationData.Currentのプロパティで取得できる。

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ApplicationData appData = ApplicationData.Current;

            // ローカルフォルダ
            Debug.WriteLine(appData.LocalFolder.Path);
            // ローミングフォルダ、同じアプリをインストールした他のデバイスに同期される。
            Debug.WriteLine(appData.RoamingFolder.Path);
            // テンポラリフォルダ
            Debug.WriteLine(appData.TemporaryFolder.Path);
        }

ローミングフォルダはサイズが決まっていてRomingStorageQuotaプロパティでわかる。ちょっと見てみたら100KBってなっていた。ほんとにちょっとしたデータしか同期できないな。



このエントリーをはてなブックマークに追加

↑このページのトップヘ