Power Automate for desktopのバイナリ データってなに?
Power Automate for desktop(PAD)には「ファイルをバイナリ データに変換」アクションが用意されていて、主にOneDriveやSharePointとのデータのやり取りに使用します。
このアクションを使うとバイナリ型の変数(通常は%BinaryData%)が生成されるのですが、値は「Byte [****]」のようになっているだけで、メッセージボックスでもそのまま表示されます。
以前からこれはいったい何なのか気になっていたので、調べてみることにしました。
調べる方法は簡単で、「.NET スクリプト実行」アクション経由(ダイナミック型の値として渡す)でGetTypeメソッドを使用します。
ret = bin.GetType().FullName;
上記フローを実行した結果、「Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Types.BinaryObject」が返ってきました。
検索すると下記Microsoft Learnの資料がヒットしました。
この資料によると「Data」プロパティからバイト配列を取得できそうです。
このバイト配列を使って何かできないかと考えたのですが、とりあえず先頭の数バイトを取得して、ファイルがPNG形式であるかどうかを判定するフローを書いてみました。
実行するコードは、ファイルの先頭8バイトを文字列として取得する処理を行います。
byte[] firstBytes = new byte[8];
Array.Copy(bin.Data, firstBytes, 8);
ret = BitConverter.ToString(firstBytes).Replace("-", string.Empty).ToLower();
ファイルのマジックナンバーはWikipediaを参考にしました。
上記フローを実行すると、PNGファイルを指定した場合は「指定したファイルは png ファイルです」とのメッセージが、そうでない場合は「指定したファイルは png ファイルではありません」とのメッセージが表示されます。
拡張子だけでは判別できないファイルの識別に役立つかも!?しれません😅
今回はファイルのバイト配列の上手い活用方法が思いつかなかったので適当な処理にしてしまいましたが、何か良い活用方法を思いついたら改めて記事を書くことにします。