Ticket #24134

フォルダ制御及びファイルフォルダ属性付与

Open Date: 2011-01-14 01:57 Last Update: 2011-02-24 21:35

Reporter:
Owner:
(None)
Status:
Closed
Component:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

ファイル、フォルダ操作関連のコマンドで、filesearch,create,deleteのような形でfoldersearch,create,deleteコマンドやfilecreate,foldercreateにパラメータを1個追加してReadonly,Hiddenといった属性を付与することは可能でしょうか。

Ticket History (3/10 Histories)

2011-01-14 01:57 Updated by: gorugon
  • New Ticket "フォルダ制御及びファイルフォルダ属性付与" created
2011-01-27 17:24 Updated by: (del#1144)
Comment

getfileattr, setfileattr, foldercreate, folderdelete, foldersearch マクロコマンドを実装してみました。

http://ttssh2.sourceforge.jp/snapshot/snapshot-20110127.zip

2011-01-28 12:40 Updated by: gorugon
Comment

早速のご対応ありがとうございました。
foldersearchでフォルダの有無を確認できないようですが、早速追加頂いた「getfileattr」を活用してフォルダの有無の確認が可能でした。

Target='C:\TEST'
getfileattr Target
if result <> -1 then

if result = $10 then
messagebox "フォルダが存在します" "folder_exist"
else
messagebox "ファイルが存在します" "file_exist"
endif

endif

2011-01-28 13:45 Updated by: (del#1144)
Comment

foldersearchはフォルダがあると1を返します。

Target='C:\TEST'
foldersearch Target
messagebox result 'result'

私の手元ではこれで正しく値が返ってきますが、いかがですか?

また、getfileattrの返り値にはビット演算を使う必要があります。数値の比較では、別の属性が付いてる場合に正しく結果が得られません。

2011-01-28 15:36 Updated by: None
Comment

説明不足ですいません。
ご連絡通りfoldersearchでフォルダが存在する場合は「1」を返しますが、
同一名のファイルが存在する場合は「0」を返す挙動なので、同一名のファイルが存在しますと
folderserch=1,foldercreateでは失敗してしまいます。
これを回避するために、getfileattrで属性がフォルダか否か確認してフォルダの場合とファイルの場合で
処理を分岐させようと考えていました。
getfileattrの返り値に以下の通りビット演算子を使ってフォルダか否か確認していますが、問題ないでしょうか。

Target='C:\TEST'
getfileattr Target
if result <> -1 then

if result & $10 > 0 then
messagebox "フォルダが存在します" "folder_exist"
else
messagebox "ファイルが存在します" "file_exist"
endif

endif

2011-01-28 17:00 Updated by: (del#1144)
Comment

「ファイルでもフォルダでもその名前のもがない」ことを確認するには、 filesearch を使うとよいと思います。

「その名前のものがある/ファイルがある/フォルダがある」をすべて区別したいときには、おっしゃるように getfileattr を使うか、snapshot に含まれるヘルプの例のようにする必要があるでしょう。

filesearch がファイルまたはフォルダがある場合に「ある」と返すように実装されていたため、そちらからフォルダチェックの機能を削除することはしませんでした。「フォルダがあるときだけその中にファイルを作る」のような用途では、単体のfoldersearchが使えると思います。

2011-01-28 17:26 Updated by: None
Comment

filesearchのヘルプの例をしっかり読んでいませんでした。
例のコードで対応可能ですね。
ありがとうございました。

2011-01-28 19:46 Updated by: None
Comment

foldersearch,foldercreate,folderdelete,getfileattr,setfileattrの一通りの動作を確認したところ、
問題なく動作しておりますが、一点以下の事象が想定された挙動なのか確認させてください。
file = 'c:\TEST'
foldercreate file
getfileattr file
attr = result | $1
setfileattr file attr

上記を実行後してフォルダを読み取り専用にした後、手動でフォルダの読み取り専用のチェックをはずし、
別のマクロでフォルダ削除を試みてもフォルダを削除することができませんでした。
file = 'c:\TEST'
folderdelete file
また、上記削除マクロに追加して属性を$80に変更してから削除を試みましたが削除できませんでした。
file = 'c:\TEST'
getfileattr file
attr = result | $80
setfileattr file attr
folderdelete file
読み取り専用属性を解除して削除可能にすることはできますでしょうか。
フォルダだけでなく、ファイルに関しても同様の動作でした。

2011-01-29 00:44 Updated by: (del#1144)
  • Resolution Update from None to Fixed
Comment

手動でフォルダの読み取り専用のチェックをはずし

当方の環境はXPですが、この操作の後getfileattrで確認すると読み取り専用属性は解除されていませんでした。http://www.geocities.jp/site_uma/win01.html

attr = result | $80

既存の属性値と$80の論理和を作成していますが、ヘルプからリンクしている"File Attribute Constants"をご覧頂くと「0x80は単独で使うこと」と説明があります。

また、削除したい属性値が0x1と分かっているなら、attr = result & ~$1 とすることで 0x1 を削除した属性値を作成できます。

2011-02-24 21:35 Updated by: (del#1144)
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2011-02-24 21:35

Attachment File List

No attachments

Edit

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