AI様様
なんか初夏を思わせる気候と空模様。
暦の上では、夏だしね。
でも、明日、明後日は、天気が崩れるようだ。
自作プログラムVB.NETで、ファイルやフォルダのタイムスタンプを変更するプログラムを、随分前に作った。
上部に、コピー元となるファイルやフォルダを、ドラッグ&ドロップする。
その日付が表示される。
下部に、それら日付を反映させたいファイルやフォルダをドラッグ&ドロップすると、即時に、上部の日付が反映される。
いちいちボタンを操作したりなんなりしなくてもいいし、世の中には、こういうのは一杯あるけれど、ドラッグ&ドロップするだけで終えられるので、我ながらいいソフトウェアだと思っている。(笑)
まとめて変更する機能はないので、そういう時は、そういうのを使えばいい。
使っていて、不思議に思うことがあった。
フォルダのタイムスタンプが変わらない時がある。
常に変わらないのではなく、そういう時もある、という感じ。
これまた不思議なのが、他の人が作ったソフトウェアでは、問題なく変更出来る。
あまり深追いはしなかったのだけれど、最近、気になって調べてみることにした。
すると、こういうエラーが出ていた。
「別のプロセスで使用されているため、プロセスはファイル’フォルダ名’にアクセスできません。」というもの。
例えば、このフォルダの中に入って、戻って、タイムスタンプを変更しようとすると、こうなる。
が、別のソフトウェアでは、更新出来る。
一体何が違うのだろう?
フォルダがロックされているのか?と思って、ロック解除のソフトウェアで見ても、ロックされていないと出る。
しかし、リソースモニターで見ると、Explorerがロックしているから、このエラーなんだと思う。
ちなみに、Explorerを終了させてから、実行すると、問題なく更新出来る。
ということは、そういうことなのだろう。
このエラーが出て、更新する時は、一旦、Explorerを終了してから更新すればいいか、と思ったけれど、面倒だし、なんか気持ち悪い。
他のソフトウェアで出来ていて、これで出来ないのは解せない。
日付更新の仕方に問題があるのか?と思って調べてみたけれど、これといった情報に当たらなかった。
Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(フォルダ名)
di.CreationTime = 日時
や
IO.Directory.SetLastWriteTime(フォルダ名, 日時)
どちらもダメ。
Win32 API「SetFileTime」でも出来るようなので、AIに聞いてやってみたけれど、コードが間違っているのか、ハンドルが取れない。
もしかしたら、うまく出来ているソフトウェアは、この「SetFileTime」で出来ているのかもしれない。
これ以上、時間を費やすのもな、と思ったので、発想を変えて、困った時のPython(笑)だったらどうだろう?と思って、AIに聞いて、まずは簡単なサンプルで試してみた。
なんと、Pythonでは問題なし!
VB.NETとPythonでは、日付更新のレベル(階層)が違うのか?
なんか解せない。
じゃぁ、Pythonで作り直してみよう、と思って調べてみると、なんとまぁ、よくわからないけれど、「os.utime」では、更新日時とアクセス日時は変更出来るけれど、作成日時は変更出来ないとか。
なんで??
更に調べてみると、「win32_setctime.setctime」というライブラリ(pip install win32-setctimeでインストール)で、作成日時を変更出来るようなので、これらの組み合わせでやるしかなさそうだ。
このライブラリ、少し前まで、フォルダの作成日時を変更出来なかったそうだけれど、今は大丈夫とのこと。
AIを使って、ほぼ同じものを作り直すことが出来た。
仕組みは同じ。
スクリーンショットを撮っている時に気付いた。
更新日時と作成日時の順番が逆だ。
まぁいいや。(苦笑)
AIが出て来てから、本当にコーディングが楽になったよ。
調べながらやったら、何日も掛かるものが、何分の一の労力で出来るようになるからね。
AI様様だ。(笑)
Win32 APIでハンドルが取れない理由も突き止めたい気もするけれど、気が向いたらだな。
とりあえず、これで、問題なく、ファイルもフォルダも、タイムスタンプを変更することが出来るようになってよかった。
| 固定リンク
« お直し・修繕 | トップページ | 解決するもんだね »
「パソコン・インターネット」カテゴリの記事
- もっと早くやっておけばよかった(2025.04.20)
- ブックマークの並びが(2025.02.28)
- 一安心(2025.02.12)
- 準備が整ってしまった(2025.02.11)
- 隙あらば(2025.02.10)
コメント