« お休み | トップページ | 色のまじりあい »

2020年11月13日 (金)

今更ながら

今日は13日の金曜日!

な、なにかあるか?!?!

 

基本は曇り。

夕方前に、太陽が見えた。

寒い寒い...

 

3日前に、同じソースなのに、動きが違うっていう記事を書いた。

今回も同じような感じで、同じファイルを読み込んでいるのに、Windows起動直後と、その後ゴチャゴチャやっている時とで、出てくる結果が違う、という現象に出くわした。

さっぱりわからん!

Windows起動直後で環境がきちんと整っていないから、違う結果が出てくるのだろうか?と思ったけれど、どうも違うよう。

あれやこれやと検証した結果、原因がわかった。

僕は、Windows起動時に起動させたいプログラムに関しては、基本的にはWindows標準の「スタートアップ」は使用していない。

フリーソフトで、自動起動を管理してくれるソフトを使わせてもらっている。

それがヒントというか、原因というか。
いや、原因は・・・(苦笑)

僕が作成したプログラムの中で、ファイルを読み込んでいる。

それは、実行ファイルと同じ場所に存在している。

普通に起動すれば何も問題ない。

が、その自動起動するソフト経由で起動すると、そのファイルを読み込んでくれない、というのがわかった。

どうやら、その自動起動するプログラムが存在するフォルダが「勝手に」割り当てられ、存在しないファイル扱いになってしまっていたようだ。

こういう感じ。

自動起動するソフト=Aフォルダ\AA.exe
僕のプログラム=Bフォルダ\B.exeとC.txt
プログラムの中の記述は、「.\C.txt」。つまり、実行ファイルと同じフォルダにあるという認識での設定。

そういう記述だと、B.exeを直接起動せず、自動起動するソフト経由だと、C.txtは、Aフォルダ\C.txtとなってしまう。

それがわかったので、プログラムの中で、B.exeが起動したフォルダをC.txtにきちんと割り当てるようにした。

すると、問題なく起動した!

もうちょっと調べていくと、なるほどな、ということがわかった。

ショートカットと同じ仕組みなので、それで説明。

ショートカットを作成すると、こういう感じになる。

ポイントは、「作業フォルダ-」というもの。

これは、ほとんどの場合、そのEXEファイルと同じフォルダになる。

今回のように、僕のプログラムの最初の記述「.\C.txt」であれば、「作業フォルダー」がきちんと設定されていれば、OSが「Bフォルダ\C.txt」にしてくれるので問題ない。

が、ここを空白で、「.\C.txt」という記述の状態だと、きちんとフォルダが記述されていないので、そんなファイルないよ、ということになる。

だから、B.exeから呼び出そうとしても、C.txtは、同じフォルダにあっても、行方不明扱いとなってしまう。

自動起動するソフトの中にも、きちんと、作業フォルダを設定するところがあり、そこをきちんと設定すれば、「.\C.txt」でも問題なく動いた。

そう言えば、ショートカットを作成して、そのソフトを起動しようとしても、起動しないものがあったことがある。
思い起こすと、確かに、この作業フォルダーが空欄だったわ。
僕のプログラムと同じように、そのプログラムも、設定ファイルや読み込みファイルを見失って、読み込めなかったんだね。

なーるほど!

Windowsを結構な年数使ってきているけれど、今更ながら、「作業フォルダー」の意味合い、役割を知ったのであった。

それもそうなんだけれど、プログラムの中で、きちんとパスを通すようにしないとダメだね。

いい勉強になった。

|

« お休み | トップページ | 色のまじりあい »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« お休み | トップページ | 色のまじりあい »