saveas の不適切な動作No.09987
yamashita さん 22/11/09 12:06
 
秀丸担当様
saveas の関連で、不適切と思われる動作があるので、報告します。

以下のような2つのマクロを作成します。
ここから macro1.mac >>>>
saveas "c:\\hoge:gege.txt";
endmacro;
<<<< ここまで

ここから macro2.mac >>>>
saveas "c:/tmp/hoge hoge:gege.txt";
endmacro;
<<<< ここまで
c:/tmp を作成しておきます。
macro2.mac では、ディレクトリ区切り子に、"\" ではなく、"/" を用いています。

ここで保存しようとしているファイル名には、どちらにも ":" が入っているので、
不正なファイル名だと思います。
以下の件は、「saveas で保存しようとするファイル名が不正だと気付かずに、これ
と同等の処理をしてしまった場合」に、特に問題だと思います。

・空の秀丸になにか適当に文字列を入れ、macro1.mac を実行します。
・別の空の秀丸になにか適当に文字列を入れ、macro2.mac を実行します。
すると、手元では以下のようになります。

(1)
私は、秀丸のタイトルバーに、フルパスのパス名を表示させています。
この表示が、不正なはずのファイル名
(macro1.mac) "c:\hoge:gege.txt"
(macro2.mac) "c:\tmp\hoge hoge:gege.txt"
になります。

つまり、表示上は、不正なファイル名で正しく保存されたように見えています。

(2)
しかし実際のファイルの保存状況は、以下だと思います。
(macro1.mac) c:\ には、それらしいファイルが作成されていない。
(macro2.mac) c:\tmp に、"hoge hoge" という、サイズ 0 のファイルが作成される。

これらの秀丸で [編集] メニュー [再読み込み] を実行すると、「そのファイルはな
い」というメッセージが出ます。

(3)
(2)では、どちらも実際にはファイルの内容は保存されていません。
ところが(1)に書いたように、表示上は作成・保存されたように見えます。
つまり、(1)の表示を見て、不正なファイル名だと気づかずに、「ファイルが保存さ
れた」と思い込み、秀丸を閉じてしまうと、その内容は失われてしまいます。

なお、ファイルに使えないこの他の文字、\ / * ? < > | (これらだけでしょうか?
よく分かりません。)でも同様の状況なのかも知れませんが、確認していません。

手元では、マクロで、こうしたファイル名では保存しないように修正したので特に問
題ではありません。
しかし一般的に問題のある動作ではと思うので、ご報告しました。

[ ]
RE:09987 saveas の不適切な動作No.09988
さん 22/11/09 12:45
 
 こんにちは。
 横からすみません。

 コロン付きのファイルはNTFSの代替えデータストリームという仕組みを用いて保存
されています。
 なので、多分FAT32のドライブとかに保存しようとするとエラーになるのではない
かと思います(手元に対応環境がないので未検証ですが)。
 そのため、一応保存はできるけども、中身のないような状況になってしまいます。
 ちなみに、代替えデータストリームは、秀丸エディタからは参照できないようです
が、 notepad を利用して確認することができます。
 マクロ2の例を参考にしますが、ファイル名が「c:\tmp\hoge hoge:gege.txt」の場
合は、コマンドプロンプトで下記のようなコマンドを実行します。

notepad.exe "c:\tmp\hoge hoge:gege.txt"

 ただ、確かに意図せずコロンがついたファイルに保存してしまうと、困ったことに
なるのは事実だと思います。
 マクロ側で対応するか、秀丸エディタ側での対応が必要かと思います。
 ちなみに、「|」を含んだファイルに保存しようとすると、エラーが表示されるこ
とは手元で一応確認しています。

 それでは。

[ ]
RE:09988 saveas の不適切な動作No.09990
yamashita さん 22/11/09 14:50
 
陸さん、ありがとうございます。
> NTFSの代替えデータストリーム
あ、なるほど。
(代替データストリーム関係は、前にもなんかあった気がしますが、忘れてしまいま
した。)
notepad の付近も、どうもです。

> 「|」を含んだファイルに保存しようとすると、エラーが表示される
こちらもなるほど。エラーになれば、対応できそうです。
エラーの理由を最低限でいいので表示してくれればと思います。

[ ]
RE:09990 saveas の不適切な動作No.09991
秀丸担当 さん 22/11/09 17:28
 
陸さんご指摘の通り、":"の後は、NFTSの代替データストリーム、サブストリーム、
副ストリームということになっていて、ファイル名としては有効です。
さらにややこしい話もあって、とりあえず以前のスレッドを参照してほしいです。
https://www.maruo.co.jp/hidesoft/4/x09198_.html#9198

開く/名前を付けて保存などの、一般的な操作からはできないようになっています。
notepad.exeから開けるように、コマンドラインでhidemaru.exeの引数にすれば開く
ことができます。
マクロでもできて、saveasしたものは、openfileで開けます。

"|"を含むときのエラーは、通常はエラーメッセージが出ます。
disableerrormsg;の状態だと、出ないです。
resultは0になりました。
result以外の詳しいことはgetresultexで知ることはできませんでした。
getresultexに何らかの知る方法を追加しようと思います。

>なお、ファイルに使えないこの他の文字、\ / * ? < > | (これらだけでしょうか?

ファイル名として使えない文字は、これ以外に「"」があります。

[ ]
RE:09991 saveas の不適切な動作No.09992
yamashita さん 22/11/09 22:25
 
> とりあえず以前のスレッド
私が質問したのですね。失礼。2年半前をすっかり忘れていました。
こういう事情だと仕方ないですね。
(また忘れて同じ質問しないようにしたい、、、)

[ ]