Ticket #36643

ディレクトリ存在判別

Date d'ouverture: 2016-09-17 16:21 Dernière mise à jour: 2016-11-30 21:36

Rapporteur:
(del#24082)
Propriétaire:
(del#24082)
État:
Atteints
Composant:
Priorité:
5 - moyen
Sévérité:
5 - moyen
Résolution:
Fixed
Fichier:
Aucun
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Détails

マクロの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
Commentaire

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
Commentaire

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

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

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

ちなみに、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
Commentaire

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

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

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

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

なるほど。

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

2016-09-17 18:12 Updated by: (del#24082)
  • Jalon Update from (Aucun) to Tera Term 4.93 (atteints)
  • Composant Update from Tera Term Macro to Document
  • Propriétaire Update from (Aucun) to yutakapon
2016-09-23 23:58 Updated by: (del#24082)
  • Résolution Update from Aucun to Fixed
2016-11-30 21:36 Updated by: (del#24082)
  • Ticket Close date is changed to 2016-11-30 21:36
  • État Update from Ouvert to Atteints

Attachment File List

No attachments

Modifier

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