(79) プログラムはどこで実行されるのか
Program オブジェクトの中に、Directry というプロパティがありまして。
実行されているプログラムがどこのフォルダに格納されているかをフルパスで返してくれる機能なんですが。
Small Basic のプログラムは、F5 とかを押して実行しようとすると、いったんコンパイルされて .exe ファイルができ、その .exe ファイルが起動されるという実行方式を採っています。
で、この .exe ファイルがどのドライブのどのフォルダに保存されているかを取得できるわけですね。
一般的な使い方としては、.exe ファイルと同じフォルダに画像などのリソースファイルを格納しておき、そのリソースを読み込もうとする時に Program.Directory で取得したフォルダの中に探しに行く、なんて時に使うと思うんです。
で、いろんなシチュエーションにおいてこのプロパティがどんな値を返すのかを調べてみました。
でまあ、
GraphicsWindow.Hide()
GraphicsWindow.ShowMessage(Program.Directory,"プログラムフォルダ")
なんてコードを用意しまして。
このコードを 保存しないで いきなり実行した場合、Program.Directory は何を返すのか。
おお、わりと普通。
これは、Windows 標準のテンポラリフォルダですね。Windows 7 では、上記フォルダが標準のテンポラリフォルダです。
環境変数でも
こうなっているわけですし。
次、いったんどこぞにソースを保存してから実行したらどうなるか。
C:\Users\salvage\Documents\SmallBasic\Projects\sbex003_Directory に sbex003.sb というファイル名で保存してから実行してみることにします。
ソースを保存したフォルダが返ります。
まあ実際 .exe ファイルもソースと同じフォルダにできるわけですから。
さて、もうひとつ。
このソースを「発行」して、Web 実行されるとどうなるのか。
( QGC303 )
こんなんなりました。smallbasic.com の program フォルダの下ですね。そーか「発行」はここに保存していたのか。
というか、そもそもなんでこんなことを調べていたかというと、実はローカル実行と Web 実行の区別をつける方法はなんかないかなー、と探していたのでした。
Program.Directory の戻り値が「http」から始まっていたら Web 実行、ドライブレター+「:\」で始まっていたらローカル実行、という判断でイケるっぽいですね。
