質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1362閲覧

外部フォルダのpngファイルをbyte[]に変換したい

shimazu

総合スコア38

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

0クリップ

投稿2018/06/26 01:05

編集2018/06/26 02:04

Unity製のアプリ(PC,Mac&Linux Standaloneの中でwindows向けのビルド)で、ユーザからPC内の画像を取得する方法が知りたいです。
その際、ユーザが選択した画像のファイルパスを取得することはできたのですが、それをbyte[]に変換できません。

具体的には、readPngFileにユーザが取得したfile:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.pngを入れたところ、
DirectoryNotFoundException: Could not find a part of the path "/Users/xxxxxxxxxx/TestPOSTAPI/file:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"
というエラーが出ました。

csharp

1 2using UnityEngine; 3using System.IO; 4 5public class TestScript : MonoBehaviour { 6 void Start(){ 7 string path = "file:/Users/xxxxxxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"; 8 byte[] body = readPngFile(path); 9 } 10 11 byte[] readPngFile(string path) { 12 using (FileStream fileStream = new FileStream (path, FileMode.Open, FileAccess.Read)) { 13 BinaryReader bin = new BinaryReader (fileStream); 14 byte[] values = bin.ReadBytes ((int)bin.BaseStream.Length); 15 bin.Close (); 16 return values; 17 } 18 } 19}

絶対パスにする方法として@をつければ出来るものもあったので、試しましたが同様のエラーでした。

csharp

1 byte[] readPngFile(string path) { 2 using (FileStream fileStream = new FileStream (@""+path, FileMode.Open, FileAccess.Read)) { 3 BinaryReader bin = new BinaryReader (fileStream); 4 byte[] values = bin.ReadBytes ((int)bin.BaseStream.Length); 5 bin.Close (); 6 return values; 7 } 8 } 9
yunyunno👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

環境はMacでしょうか。
URL形式(file://~)で始めず、単純にフルパスで記載してみてはいかがでしょうか。

投稿2018/06/26 01:37

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shimazu

2018/06/26 01:53 編集

環境はMacです。単純にフルパスとは string path = "C:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"; readPngFile(path) をするということでしょうか? そうしたとしても同じエラーが出ます。
kazto

2018/06/26 01:55

Macですので、「C:」は不要です。
shimazu

2018/06/26 02:03

ありがとうございます。 pathは追加されずに通りました。
kazto

2018/06/26 02:06 編集

恐らく今までは、絶対パスではなかったためにreadPngFileが相対パスと判断してパスを追加して、やっぱり見つからなくて、という流れになっていたと推測します。
guest

0

DirectoryNotFoundException: Could not find a part of the path "/Users/xxxxxxxxxx/TestPOSTAPI/file:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"

このディレクトリが存在していない、という例外です。
パスを確認してください


"/Users/xxxxxxxxxx/TestPOSTAPI/file:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"
ってパスはそもそもおかしいですな

投稿2018/06/26 01:09

編集2018/06/26 01:11
y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shimazu

2018/06/26 01:27

勝手にpathが追加されるようで、例えば string path = "file:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png" byte[] body = readPngFile(path) とすれば上のエラーが出るんです。
y_waiwai

2018/06/26 01:34 編集

勝手には追加されません。 あなたのコードがどこか間違っています --- って、 string path = "C:/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"; がただしいんでは?
y_waiwai

2018/06/26 01:38

ああ、Unityか。。 なら、 string path = "Assets/Resources/dummy01.png"; でやってみてください
shimazu

2018/06/26 01:49

確かにそれでいけるんですが、やりたいのは任意のフォルダなので、他のフォルダを指定する場合どうすればいいですか? 例えば Users/xxxxxxxxx/Downloads/dummy01.png とか
y_waiwai

2018/06/26 01:52

たんに、 string path = "/Users/xxxxxxxxxx/TestPOSTAPI/Assets/Resources/dummy01.png"; ではどうなるでしょう
shimazu

2018/06/26 02:05

通りました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問