このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
パッケージ化されたアプリケーションでのファイルへのアクセス
MATLAB® スクリプト ファイルに加えて、データ ファイル、DLL、および他のプログラミング言語のファイルなど、他のタイプのファイルをデプロイ可能なアーカイブに追加できます。関数 which
を使用するか、デプロイ可能なアーカイブのルート ctfroot
を基準としたファイルの場所を参照して、デプロイしたコードから追加ファイルにアクセスできます。
デプロイ可能なアーカイブの詳細については、デプロイ可能なアーカイブについてを参照してください。
デプロイ可能なアーカイブにファイルを含める
MATLAB Compiler™ は依存関係の分析関数を使用して、生成されるパッケージに含める必要なファイルのリストを決定します。詳細については、MATLAB Compiler を使用した依存関係の分析を参照してください。
mcc
コマンドで -a
フラグを使用するか、compiler.build.standaloneApplication
のように関数 compiler.build
を使用した 'AdditionalFiles'
オプションで、デプロイ可能なアーカイブに追加ファイルを含めることができます。
あるいは、deploytool
アプリの [エンド ユーザー用にインストールされるファイル] セクションにファイルを追加すると、インストール後に実行可能ファイルとして同じディレクトリに表示することもできます。
%#function プラグマを使用して MATLAB データ ファイルを明示的に含める
既定では、コンパイラは依存関係の分析で MATLAB データ ファイル (MAT ファイル) を除外します。コンパイラで MAT ファイル内のデータを明示的に調べる場合、MATLAB コードを記述するときに %#function
プラグマを指定します。
たとえば、MAT ファイルから読み込まれた ClassificationSVM
クラスへの依存関係を含める場合は、%#function
プラグマを使用します。
function foo %#function ClassificationSVM load('svm-classifier.mat'); num_dimensions = size(svm_model.PredictorNames, 2); end %function foo
MEX ファイル、DLL、共有ライブラリを含める
MEX ファイルを含んでいる MATLAB 関数をコンパイルする場合は、依存関係解析による検索が可能であることを確認してください。特に次の点に注意してください。
依存関係解析では、MEX ファイル、DLL または共有ライブラリを調べて依存関係を判定することができないため、これらのファイルに必要なすべての実行可能ファイルは明示的に含めてください。
依存関係解析が MEX ファイル、DLL、共有ライブラリによって呼び出された MATLAB 関数を検索できるかどうかわからない場合は、手動で含めてください。
コンパイラと互換性がない関数もあります。ビルドが完了したら、ファイル
mccExcludedFiles.log
を確認してください。このファイルには、デプロイできないアプリケーションから呼び出されたすべての関数がリストされています。
デプロイした関数からのファイルへのアクセス
デプロイした MATLAB コードからファイルにアクセスするには、isdeployed
を使用して、コードがデプロイ モードで実行されているかどうかをチェックします。次に、関数 which
を使用するか、ctfroot
を基準としたファイルの場所を指定して、ファイルを特定します。
関数 which
の使用
ファイルへのパスを取得する最も簡単な方法は、関数 which
を使用してファイルを特定することです。
if isdeployed locate_externapp = which(fullfile('extern_app.exe')); end
which
は、デプロイ可能なアーカイブ内にあれば、ファイル extern_app.exe
へのパスを返します。ctfroot
でのファイルの場所の指定
現在の MATLAB 作業フォルダー以外のフォルダーにあるファイルを含めると、ファイルの部分パスは ctfroot
を基準としたデプロイ可能なアーカイブに保持されます。
現在の MATLAB 作業フォルダーまたはサブフォルダー内のファイルは、現在のフォルダーからファイルへの相対パスを保持します。
たとえば、パッケージ化中に MATLAB で開くフォルダーが
D:\Documents\Work\MyProj
の場合、ファイルD:\Documents\Work\MyProj\exfiles\data1.mat
はデプロイ可能なアーカイブの
に配置されます。ここで、ctfroot
\mfilename
\exfiles\data1.matmfilename
はメインの MATLAB スクリプト ファイルの名前です。現在の作業フォルダー外にあるファイルは、ディスク ドライブのルートから完全なフォルダー構造を保持します。
たとえば、ファイル
C:\Users\mwuser\Documents\External\externdata\extern_app.exe
はデプロイ可能なアーカイブの
に配置されます。ctfroot
\Users\mwuser\Documents\External\externdata\extern_app.exe
関数 fullfile
を使用し、ファイル パスでシステムの正しいファイル区切りが使用されていることを確認してください。
if isdeployed locate_data1 = fullfile(ctfroot,'exfiles','data1.mat')); locate_data2 = fullfile(ctfroot,'Users','mwuser','Documents',... 'External','externdata','extern_app.exe')); end
デプロイされたアプリケーションの MATLAB データの処理例
この例では、データ ファイルをパッケージ化されたアプリケーション内に含めて、関数 load
と save
を使用して MATLAB データを操作する方法を説明します。
MATLAB の作業フォルダーに移動します。この例での作業フォルダーは
C:\Users\mwuser\Documents\Work\exfiles
です。MATLAB に付属している
Data_Handling
フォルダーとexterndata
フォルダーを作業フォルダーにコピーします。copyfile(fullfile(matlabroot,'extern','examples','compiler','Data_Handling'),'Data_Handling'); copyfile(fullfile(matlabroot,'extern','examples','compiler','externdata'),'externdata');
MATLAB コマンド プロンプトで、作業フォルダー内の新しい
Data_Handling
フォルダーに移動します。ex_loadsave.m
を調べます。ex_loadsave
スクリプトは、それぞれ異なるフォルダーに配置されている 3 つの MATLAB データ ファイルを読み込みます。user_data.mat
— 現在のフォルダーuserdata\extra_data.mat
— 現在のフォルダーのサブフォルダー..\externdata\extern_data.mat
— 現在のフォルダー以外
データ ファイルをリストする cell 配列を作成します。
datafiles = {'user_data.mat','./userdata/extra_data.mat','../externdata/extern_data.mat'};
関数
compiler.build.standaloneApplication
を使用してex_loadsave.m
をコンパイルします。compiler.build.standaloneApplication('ex_loadsave.m','AdditionalFiles',datafiles)
コンパイルされたアプリケーションを実行します。
!ex_loadsavestandaloneApplication\ex_loadsave.exe
Load A from : C:\Users\mwuser\AppData\Local\Temp\mwuser\mcrCache9.13\ex_loa0\ex_loadsave\user_data.mat A= 21.4669 15.7255 15.6930 11.8122 19.6691 17.0570 17.4689 22.2803 20.3894 17.2548 17.3474 17.7316 19.3062 15.1321 16.0573 25.4584 Load B from : C:\Users\mwuser\AppData\Local\Temp\mwuser\mcrCache9.13\ex_loa0\ex_loadsave\userdata\extra_data.mat B= 15.3970 20.5682 13.8388 26.5186 14.2255 24.6506 18.9545 24.8117 14.9904 22.8211 16.4942 25.3533 13.1022 26.0567 21.2197 24.8940 Load extern data from : C:\Users\mwuser\AppData\Local\Temp\mwuser\mcrCache9.13\ex_loa0\Users\mwuser\Documents\Work\exfiles\externdata\extern_data.mat ext_data= 27.6923 69.4829 43.8744 18.6873 4.6171 31.7099 38.1558 48.9764 9.7132 95.0222 76.5517 44.5586 82.3458 3.4446 79.5200 64.6313 A * B = 1.0e+03 * 0.9442 1.4951 1.1046 1.6514 1.0993 1.8042 1.3564 1.9424 1.0518 1.7026 1.2716 1.8500 1.0868 1.7999 1.3591 1.9283 Save the A * B result to : C:\Users\mwuser\Documents\Work\exfiles\Data_Handling\output\saved_data.mat
結果を
ex_loadsave.m
の出力と比較します。