待辦事項 #36643

ディレクトリ存在判別

啟用日期: 2016-09-17 16:21 最後更新: 2016-11-30 21:36

回報者:
(del#24082)
負責人:
(del#24082)
類型:
狀態:
關閉
元件:
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
修正
檔案:
Vote
Score: 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

Ticket History (3/10 Histories)

2016-09-17 16:21 Updated by: (del#24082)
  • New Ticket "ディレクトリ存在判別" created
2016-09-17 16:22 Updated by: (del#24082)
  • Details Updated
2016-09-17 17:27 Updated by: 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 Updated by: doda
評語

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

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

2016-09-17 17:47 Updated by: (del#24082)
評語
なるほど、理解しました。既存のマクロコマンドで実現できますね。
後で、ドキュメントのほうは追記しておこうと思います。

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

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

2016-09-17 17:58 Updated by: doda
評語

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

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

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

2016-09-17 18:04 Updated by: (del#24082)
評語

なるほど。

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

2016-09-17 18:12 Updated by: (del#24082)
  • 里程碑 Update from (無) to Tera Term 4.93 (closed)
  • 元件 Update from Tera Term Macro to Document
  • 負責人 Update from (無) to yutakapon
2016-09-23 23:58 Updated by: (del#24082)
  • 處理結果 Update from to 修正
2016-11-30 21:36 Updated by: (del#24082)
  • Ticket Close date is changed to 2016-11-30 21:36
  • 狀態 Update from 開啟 to 關閉

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入