« お直し・修繕 | トップページ | 解決するもんだね »

2024年5月11日 (土)

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でハンドルが取れない理由も突き止めたい気もするけれど、気が向いたらだな。

とりあえず、これで、問題なく、ファイルもフォルダも、タイムスタンプを変更することが出来るようになってよかった。

|

« お直し・修繕 | トップページ | 解決するもんだね »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« お直し・修繕 | トップページ | 解決するもんだね »