プログラム

2023.06.14

ファイルの更新日をExif情報内の撮影日時に変更する(PowerShell)

PowerShellを使って、現在のフォルダ内にあるjpgファイルにおいて、ファイルの更新日を Exif の撮影日時に変更する。

ちょっと力業。

Add-Type -AssemblyName System.Drawing;
$files = Get-Item *.jpg;
foreach ($f in $files) {
$img = New-Object Drawing.Bitmap($f.FullName);
$byteAry = ($img.PropertyItems | Where-Object{$_.Id -eq 36867}).Value;
$img.Dispose();
$time = [System.Text.Encoding]::ASCII.GetString($byteAry);
$timeAry = $time.Split(": ");
$createTime = [String]::Format("{0}/{1}/{2} {3}:{4}:{5}",$timeAry[0],$timeAry[1],$timeAry[2],$timeAry[3],$timeAry[4],$timeAry[5]);
Set-ItemProperty $f -name LastWriteTime -value $createTime;
}

(実際には1行で・・・)

Add-Type -AssemblyName System.Drawing; $files = Get-Item *.jpg; foreach ($f in $files) { $img = New-Object Drawing.Bitmap($f.FullName); $byteAry = ($img.PropertyItems | Where-Object{$_.Id -eq 36867}).Value; $img.Dispose(); $time = [System.Text.Encoding]::ASCII.GetString($byteAry); $timeAry = $time.Split(": "); $createTime = [String]::Format("{0}/{1}/{2} {3}:{4}:{5}",$timeAry[0],$timeAry[1],$timeAry[2],$timeAry[3],$timeAry[4],$timeAry[5]); Set-ItemProperty $f -name LastWriteTime -value $createTime; }

 

CD-Rに焼いて店頭でプリントしようと思った際に、デフォルトのソート順が「更新日順」だったので、わかりやすいように更新日を撮影日に置き換えてしまえ、と・・・(普段はWeb経由でプリントを依頼するのですが、CD-Rに焼いて配布する必要が生じまして)。ちなみに選択できるソート順が「更新日(降順)」「更新日(昇順)」「ファイル名」でした。

多分、これでファイルを探しやすくなったのではないかな、と。

 

(参考)PowerShellメモ 画像のExif情報を読み込む

 

| | Comments (0)

2013.01.31

0x82

Shift-JISにおいて 0x82 で始まる2バイト文字には、アルファベット、数字、ふりがなが含まれるんですね。

つまり、「ひらがな」というデータは、その気になれば(?)8バイトではなく4バイトで格納出来るってことに(笑

| | Comments (0) | TrackBack (0)

2012.03.30

.NET環境でADO

.NET環境で、ADO.NETではなくあえてADOを使用した場合・・・

An ADO application does not run on down-level operating systems after you recompile it on a computer that is running Windows 7 SP 1 or Windows Server 2008 R2 SP 1 or that has KB983246 installed

というケースもあるようで。

Windows7 SP1適用済みの環境でビルドしたアプリケーションが、Windows7 SP1未適用の環境でエラーが発生する、ということ?(機械翻訳結果より、原文の方がまだわかりやすいっていうのが・・・)

まぁ、今さらADOってところでもありますし、仕方のないところだとは思いますが。

エラーの原因としては、Win7 SP1でADOのインタフェースに一部変更が発生していることが関係しているみたいですね。

| | Comments (0) | TrackBack (0)

2012.03.24

C#のデストラクタ

他人が作成したC#のソースを見ていると、 ~SomeClass() というような定義を見かけました。

調べてみると、デストラクタの定義になるんですね。

処理タイミングなども含めて、Javaでいうところの、finalize()メソッドと同じような感じでしょうか。というか、基底クラスでFinalize()を呼び出すと書かれていますね。

MSDNの資料を見た感じ、デストラクタを使用すると、「親クラスのFinalize処理を呼び出し忘れてしまわない」というようなメリットがあるってところでしょうか。

#finalizeそのものをほとんど実装した記憶がないので、実際の挙動までは調べていませんが。

| | Comments (0) | TrackBack (0)

2012.01.25

このプログラムは正しくインストールされなかった可能性があります

「このプログラムは正しくインストールされなかった可能性があります」を回避する方法 (Windows 7, Vista)

7-Zipを用いた自己解凍型exeファイル(SFX)でファイルをコピーしたときに、「このプログラムは...」のメッセージが表示されてしまいます・・・(Windows7環境)。

UACはオフにしているのですがねぇ・・・。また、プログラム名にSetupやInstallなどの文字は含まれていませんし(強いていうなら、ファイルの説明の部分に 7z Setup SFX と記載されていることでしょうか)。

いろいろと調べてみたのですが、手詰まり。

諦めるしかないのかなぁ・・・。

| | Comments (1) | TrackBack (0)

2012.01.20

FileNotFoundException 指定されたモジュールが見つかりません 0x8007007E

FileNotFoundException 指定されたモジュールが見つかりません 0x8007007E

食らいました。

C#で使っている外部ライブラリが使っているライブラリが見つからない場合、ビルドは問題なく通るのですが、実行時に上記のエラーに。

必要なDLLがどれかを探すのに一苦労・・・。

せめて、呼び出そうと思ったクラス/メソッド名くらいは表示されてくれても良さそうなのですが。クラス名がわかると、ある程度はDLLの推測もできそうなんですけどねぇ。

| | Comments (0) | TrackBack (0)

2011.12.11

プログラミングの必修化

常識!?プログラミング

私自身はベーマガでプログラムを覚えたような世代(?)なので、今、何も知らないところからプログラミングを勉強するってどんな感じなのか、イマイチちょっとピンと来ないところもあるかも・・・。

・たまたま家にPC-88があった。
・まずはPC-88用のものを入力。
・改造(笑

ってな感じでしょうか。その後、PC-98もいろいろとやりましたが。

昔は、今のような便利な仕組みはほとんどなかったので、「実現したいこと」をコードに置き換えるためには、それ以外の勉強が必要になったりすることも。例えば、跳ね返りを表現するために、頑張ってsin/cosの使い方を調べたりしたり(グラフィックの重ね合わせからxorを覚えたり)。

今は、そういう「何かを実現するための何か」ってのは知らなくても、簡単にプログラムを作ることができてしまう時代ではありますが(開発言語がどんどん抽象化して行っているような感じでしょうかね?)、個人的には、「何故これで動いているんだろう?」っていう、さらに一歩踏み込んだところまで興味を持って欲しいかな~なんて思ったりもします。まぁ、そういう私自身、OSや言語を作ろうと思ったことはありませんが(^^;、せめて、開発環境が生成するコードがどんなものかは興味を持って欲しいかも(特にGUIアプリ)。

| | Comments (0) | TrackBack (0)

2011.10.18

(C#)AcceptButton/CancelButton

FormのAcceptButton/CancelButtonプロパティにボタンオブジェクトを指定すると、Enter/Escを押下したときに該当のボタンをクリックしたのと同じ挙動になるんですね。

「確定(実行)」「キャンセル」の二択であるような画面もそれなりにあるでしょうから、これはこれで便利・・・?

| | Comments (0) | TrackBack (0)

2011.01.08

7zip(lzma)形式で圧縮(C#)

C#で7zip形式のアーカイブファイルの作成を行ってみるテスト。

まずは、LZMA SDK。コンパイルすると、単独で使用可能なソースも一式含まれていますので、まずはそれを用いて圧縮のテスト。
・・・パフォーマンスの点から、ちょっと厳しいですねぇ・・・。7-zipから入手可能な7z.exeを用いて圧縮した時と比べると、3~4倍の処理時間がかかってしまっています。

次に見つけたのが、SevenZipSharp。7z.dllのラッパーとして提供されていることもあり、パフォーマンスとしてはいい感じです。

圧縮処理の部分だけをざっくりと書くと、以下のような感じ。

private void compress()
{
    SevenZipCompressor szc = new SevenZipCompressor();
    szc.CompressionMethod = CompressionMethod.Lzma;
    szc.CompressionMode = CompressionMode.Create;
    szc.CompressionLevel = CompressionLevel.Normal;
    szc.Compressing += new EventHandler(this.progress);
    szc.CompressFiles(@"C:\Test\test.7z", new string[] { @"C:\Test\a.txt", @"C:\Test\b.txt" });
}

public void progress(object obj, ProgressEventArgs e)
{
    Console.WriteLine(e.PercentDone.ToString());
}

ちなみに、SevenZipSharpライブラリのライセンスはLGPL(v3)とのこと。

| | Comments (0) | TrackBack (0)

2010.03.13

DataGridViewのクリア

C#のDataGridViewのRowsプロパティに対してClearを実行することで、DataGridViewのデータをいったんクリアすることが可能なようです・・・が、処理中でも、SelectionChangedイベントが普通に飛んでくるんですね。

SelectionChangedイベントを処理する際に、SelectedRows[0]とかいう感じで処理を記述していると、普通に例外が発生してしまいます。なので、SelectedRowsが1件以上あるかどうかをチェックすればOK。

っていうか、C#の例外のスタックトレース、いまいちわかりにくいと思うのは単に使い方が悪かったり、慣れていなかったりするからだけなんでしょうか・・・。Javaの方がわかりやすい気がします。SelectionChangedイベントの処理に問題があるというのにたどり着くまで、結構時間がかかってしまいました(苦笑)。

| | Comments (0) | TrackBack (0)