ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

C#でエクスプローラーで表示されるファイルの並び順と同じにソートしてみる

| 2009年6月20日土曜日
必要があったのでメモ。

IComparerを使ってArray.Sort()でソートする。

使い方は、


string[] list = { "01.txt", "1.txt", "02.txt" }
Array.Sort(list, new ExplorerSortComparer());

こんな感じ
--- ExplorerSortComparer Class ---

public class ExplorerSortComparer : IComparer {
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
public static extern int StrCmpLogicalW(string str1, string str2);

public int Compare(object obj1, object obj2) {
return StrCmpLogicalW((string)obj1, (string)obj2));
}
}

Windows Temporary Folderについて

| 2008年3月2日日曜日
 C#なんかでTempフォルダを使いたくなった時、その場所は、System.IO.Path.GetTempPath()で取得するけど、この時、得られるフォルダの場所は環境変数に定義されている順に先に見つかったのを返してくる。具体的には、

1 TMP C:\Document and Setting\LocalSetting\Temp\
2 TEMP C:\Document and Setting\LocalSetting\Temp\
3 USERPROFILE C:\Document and Setting\

 っとこれに関しては、これで良いんだけど、気になったのがこのTempフォルダはいつクリアされるのか?っという事だ。
 Tempフォルダというとなんとなく、システム側で勝手に消してくれると思っていたけど、調べてみると実は違った。
 確かに、ディスクのクリーンアップで消してはくれるけど、これは勝手にWindowsがしてくれる訳じゃなく、ユーザが自分でする必要がある。それまでは、ユーザが自分でわかってTemp領域のファイルをクリアするまで、そのまま残り続けるって事になる。
 もし、自分で作ったアプリケーションでTempフォルダを使うなら、そこに置いた一時ファイルはちゃんと、アプリで消してあげないと、どんどん溜まってしまうことになる。まぁ溜まっても限界まできたら「ディスクのクリーンアップをして下さい。」メッセージがでるから、ほって置いてもかまわないのかもしれないし、最近のHDDはデカイからそれほど問題にはならないのかもしれない。
 でも、少なくとも、自分が書く時には汚した所は自分で綺麗にして終了させるようにしたほうが礼儀正しいだろう。