【C#】メディアの作成日時を取得したい
メディアの作成日時順にファイルをソートしたかったので
GetDetailsOfで取得しようとしていた。
結果
取得できた。
でも、別のPCで試したら取得できなかったので注意。
カスタマイズすれば取得できるかも?
詳細は以下にて。
やりかた
以下はソースの一部を切り出したもの
FolderItem item; Folder folder; ShellClass shell = new ShellClass(); String refFilePath; String refFileName; // 参照先パスとファイルを分割 folder = shell.NameSpace(refFilePath); refFileName = file.Substring(file.LastIndexOf(@"\") + 1); folder = shell.NameSpace(refFilePath); item = folder.ParseName(refFileName); String tmpDate = folder.GetDetailsOf(item, 208);
解説
ShellClassはShell32を参照しないと使えない。
参照方法は別途記載する。
↓
phen1208.hatenablog.com
最終的には「tmpDate」にメディアの作成日時が格納される。
最後の行でメディアの作成日時を取得している。
第一引数は対象のFolderItemオブジェクト。
第二引数は取得したプロパティの値の何番目のデータかを指定している。
個人的には第二引数に指定する値が謎だった。
他の参考ブログを確認して該当する番号を指定しても取得できないから。
ではなぜ「208」を指定しているかというと自分で調べたから。
調べ方はシンプルで、0番目から500番目までの値を全部出力してみた。
for (int i = 0; i < 500; i++) { System.IO.File.AppendAllText(@"C:\Users\User\work\test\test.txt", folder.GetDetailsOf(item, i) + "\n\r"); System.Diagnostics.Debug.WriteLine(folder.GetDetailsOf(item, i)); }
すると、以下のようにファイルに出力された。
ちなみに、実際のプロパティは以下。
お!235番目に出てるじゃん!
と、意気揚々と234を指定(0スタートだから)しても空文字しか取得できなかたった。
これが2番目の謎。
仕方がないのでループ200回目あたりから確認すると208番目にメディアの作成日時があった。
なので、「208」を指定しているのだ。
無事、メディアの作成日時順にソートできたけど・・・
もともとの用途は、
うちのビデオカメラで撮った動画をPCに入れると撮った日付順にソートされないためだった。
さらに作成日付や更新日付もPCに入れた日時という不親切仕様。
なので、メディアの作成日時順にリネームするツールを作っていた。
で、ツールを作った開発環境は僕のデスクトップPC。
動画を編集するのは家族共有のノートPC。
なので、ツールはノートPCで使用する。
僕のPCでは問題なくメディアの作成日時順にファイルをソートできた。
ファイル名にメディアの作成日時を設定することもできた、
でも、実際にexeをノートPCで使ってみるとメディアの作成日時が取得できなかった。
原因は調べてないからわからないけど、たぶんプロパティの取得位置が変わったのではないかと思う。
だから208じゃ取ってこれないのかなあ・・・
まあ上のfor文ですぐ調べられるんだけどね。
しばらくは僕のほうのPCでリネームすることにしました。
【C#】クラスやメソッドがなぜか使えない問題解決
いろいろ試した
.NET FramWorkが古いんじゃないかとか
Visual Studioが古いんじゃないかとか
上記二つのバージョンが一致してないんじゃないかとか
いろいろ調べた。
ちなみに今のバージョンは
.NET FramWork : 4.7
Visual Studio : 2017
問題ない。
参考サイトのほうがバージョン古いし。
【C#】 他コントロールを使おうとしたらStackOverflowException発生
ソース
namespace DefictBook { public partial class MainWindow : System.Windows.Forms.Form { public static MainWindow mainCtl; public MainWindow() { InitializeComponent(); mainCtl = new MainWindow (); // initPanelにメインパネルをリンクさせる initPanel.Controls.Add(mainCtl); } } }
転職先、決まりました。
転職してから1年8か月くらい。
早くも転職することにしました。
きっかけ
妻がどこからか仕入れてきた「平均年収全国ワーストランキング」。
その上位100位以内に僕が所属する会社が入っていたことがきっかけ。
僕としては、
SESで派遣される働き方はもともと嫌悪感あったし、
会社にも特に恩を感じもしないし、
仲いい人もいないから今の会社にこだわりはなかった。
まあでも、転職してまだ1年半くらいしか経ってないし、機械学習も学び始めたところだから1年後くらいを目途にゆっくりよさげな会社を探していこうかなあ、と思ってた。
そしたら、妻がどこからか仕入れてきた会社があったので応募したところ、内定をいただいたので転職することにした。
ありがたいことに一部上場企業の子会社から内定をいただけた。
新卒でSES事業の会社に就職した人の順当なキャリアパスかな。
これからは今まで以上に仕事に真摯に取り組めそうだ。
【Python】pygameをインストールしたけど使えない
何をしたか
以下のサイトを参考にpygameをインストール
sites.google.com
インタプリタで確認すると、エラーとなる
>>>import pygame Traceback (most recent call last): File "tes.py", line 1, in <module> import pygame ModuleNotFoundError: No module named 'pygame'
解決策
apt-getでインストールすると使えないみたい。
pipを使用してインストールをする
pip install pygame
すると、うまくできた。
>>> import pygame
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
>>> print(pygame.ver)
1.9.4