チケット #36643

ディレクトリ存在判別

登録: 2016-09-17 16:21 最終更新: 2016-11-30 21:36

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

マクロのfilestatコマンドでは、ファイル情報の取得のみを目的としており、
ディレクトリかどうかの判別には使えません。
下記サイトでは、サイズがゼロかどうかで判別できるとありますが、VC++の _stat() の
仕様では規定されていないので、厳密に正しいやり方ではないと考えられます。

------------------------------------------
http://www.teraterm.jp/?p=973
では、どうやって解決すれば良いのかというと、ディレクトリの場合はsizeに0が格納されます。
ですので、システム変数resultとファイルサイズが両方とも0であった場合はディレクトリ、システム変数resultが0でファイルサイズが0超過であればファイルであると判断できます。
------------------------------------------

filestatコマンドを機能拡張して、ディレクトリ判別も行えるようにするのがよさそうです。

cf.
https://msdn.microsoft.com/ja-jp/library/14h5k7ff.aspx

添付ファイルリスト

添付ファイルはありません

チケットの履歴 (10 件中 3 件表示)

2016-09-17 16:21 更新者: yutakapon
  • 新しいチケット "ディレクトリ存在判別" が作成されました
2016-09-17 16:22 更新者: yutakapon
  • 詳細が更新されました
2016-09-17 17:27 更新者: doda
コメント

foldersearch

name = "C:\test"

foldersearch name
if result then
	messagebox "directory" name
else
	messagebox "not directory" name
endif
一つのコマンドでファイルとディレクトリの判別をしたいならばgetfileattr
name = "C:\test"

getfileattr name

if result < 0 then
	messagebox "not found" name
elseif result & $10 then
	messagebox "directory" name
else
	messagebox "file" name
endif

2016-09-17 17:32 更新者: doda
コメント

下記サイトでは、サイズがゼロかどうかで判別できるとありますが、VC++の _stat() の 仕様では規定されていないので、厳密に正しいやり方ではないと考えられます。

空のファイルの場合は当然サイズが 0 になるので、この場合は確実に誤認識しますね。

2016-09-17 17:47 更新者: yutakapon
コメント
なるほど、理解しました。既存のマクロコマンドで実現できますね。
後で、ドキュメントのほうは追記しておこうと思います。

ちなみに、filestatマクロコマンドがファイル以外に対しても、動いて
しまっているのがまずいですよね。st_mode フィールドが_S_IFREGでなければ、
エラー(result = -1)としたほうがよいでしょうか?

cf. https://msdn.microsoft.com/ja-jp/library/3kyc8381.aspx

2016-09-17 17:58 更新者: doda
コメント

動作を変えるのは既存のマクロが動かなくなる可能性が有るので反対です。

filesarch もファイルとディレクトリの両方が対象になっているので、変える必要は無いと思います。

またディレクトリをエラーにすると、今まで出来たディレクトリの最終更新時刻の確認が出来なくなるので、この点でも反対です。

2016-09-17 18:04 更新者: yutakapon
コメント

なるほど。

filestatマクロコマンドのヘルプに、ディレクトリに対しても使える、ということを書いておけばよいですね。 現状の書き方だと、ファイルのみの使用を想定していたのかと思っていたので。

2016-09-17 18:12 更新者: yutakapon
  • マイルストーン(未割り当て) から Tera Term 4.93 (完了済み) に更新されました
  • 担当者(未割り当て) から yutakapon に更新されました
  • コンポーネントTera Term Macro から Document に更新されました
2016-09-23 23:58 更新者: yutakapon
  • 解決法なし から 修正済み に更新されました
2016-11-30 21:36 更新者: yutakapon
  • チケット完了時刻2016-11-30 21:36 に更新されました
  • 状況オープン から 完了 に更新されました

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする