コマンドプロンプトで、
dir /s /-c > filelist.txt
と入力して実行します。すると、filelist.txtには、現在のディレクトリの下にある全てのファイルとディレクトリが出力されます。"/s"は下の階層まで表示するオプションで、"/-c"はファイルサイズの数字にカンマを入れないというオプションです。
これを、Cドライブの直下でやると、Cドライブにある全てのファイルとディレクトリが出力されます。処理に1分くらいかかるかもしれません。私の場合、出力結果は30MByteくらいになりました。
これでファイルサイズのリスト自体はできるのですが、余計な文字列があるため分かりにくいです。というわけで、C#でファイルサイズとファイル名だけ抽出するプログラムを作ってみました。ソースコードを下の方に載せておきます。空白行とかを無視して、必要な情報を抜き取っているだけです。
もちろんExcel VBAとかで作ることもできます。そもそも、ファイルサイズのリストを作るフリーソフトは多数あるので、わざわざプログラムを書く必要はありません。敢えてプログラムを自分で書いているのは、ただの趣味です。
で、抽出結果をExcelで読み込んで調べてみたところ、"cab_*"という0~100MByteのファイルが1000個以上ありました。
「なんじゃこりゃ?」と思って、Google先生に聞いてみたら、どうもいらないファイルらしいです(参考)。
早速、"cab_*"ファイルを削除したら、空き容量が50GByteくらい増えました。
これにて一件落着。めでたし、めでたし。勉強になりました。
using System;
using System.IO;
using System.Text;
public class Program
{
public static void Main( string[] args)
{
if( args.Length == 0)
{
return;
}
string readfile = args[0];
string writefile = readfile + ".parse.csv";
try
{
using( StreamReader sr = new StreamReader( readfile, Encoding.GetEncoding( "shift_jis")))
{
using( StreamWriter sw = new StreamWriter( writefile, false, Encoding.GetEncoding( "shift_jis")))
{
ParseDir( sr, sw);
}
}
}
catch( System.Exception err)
{
Console.WriteLine( err.Message);
}
}
private static void ParseDir( StreamReader sr, StreamWriter sw)
{
string str;
str = sr.ReadLine();
str = sr.ReadLine();
while( !sr.EndOfStream)
{
str = sr.ReadLine();
if( str.Length == 0)
{
continue;
}
if( str[0] != ' ' && str.IndexOf( "<") == -1)
{
sw.Write( Convert.ToInt64( str.Substring( 19, 16)));
sw.Write( ", ");
sw.Write( "\"" + str.Substring( 36, str.Length - 36) + "\"");
sw.WriteLine();
}
}
}
}
0 件のコメント:
コメントを投稿