次の関数を呼び出して、特定のパスを確認し、指定されたパスにあるすべてのフォルダーからリストを取得します。フォルダーごとに、フォルダーのサイズを確認します。
これは、このようなフォルダーにファイルがある場合に機能します。
指定されたフォルダーパス\Underlying_folder\file.txt
ただし、ファイルが含まれるサブディレクトリがある場合、フォルダーのサイズはわかりません。
指定されたフォルダーパス\Underlying_folder\サブディレクトリ\file.txt
これは私のコードです。
public void ListFolders()
{
dataGridView1.Rows.Clear();
DirectoryInfo di = new DirectoryInfo(Properties.Settings.Default.RevitPath);
DirectoryInfo[] diArr = di.GetDirectories();
foreach (DirectoryInfo dri in diArr)
{
string strCreateTime = dri.LastWriteTime.ToString();
string strCreateDate = dri.LastWriteTime.ToString();
string strCreateSize2 = null;
string strCreateSizeMb = null;
int strCreateSize3;
long strCreateSize1 = GetDirectorySize(Properties.Settings.Default.RevitPath + @"\" + dri);
string strCreateSize = GetSizeReadable(strCreateSize1);
strCreateTime = strCreateTime.Remove(strCreateTime.LastIndexOf(" "));
strCreateDate = strCreateDate.Remove(0,strCreateDate.LastIndexOf(" "));
strCreateSize2 = strCreateSize.Remove(strCreateSize.LastIndexOf(" "));
strCreateSizeMb = strCreateSize.Remove(0, strCreateSize.LastIndexOf(" "));
strCreateSize3 = Convert.ToInt32(strCreateSize2);
if (strCreateSizeMb == " Mb")
{
if (strCreateSize3 >= Properties.Settings.Default.FolderSize)
{
notifyIcon1.ShowBalloonTip(20000, "Attention Required!", dri + " exceed the permissible size " + Properties.Settings.Default.FolderSize + " Mb", System.Windows.Forms.ToolTipIcon.Warning);
}
}
int idx = dataGridView1.Rows.Add();
DataGridViewRow row = dataGridView1.Rows[idx];
row.Cells["User"].Value = dri;
row.Cells["Date"].Value = strCreateTime;
row.Cells["Time"].Value = strCreateDate;
row.Cells["Size"].Value = strCreateSize2;
row.Cells["SizeMB"].Value = strCreateSizeMb;
}
どこが悪いのでしょうか?
こんな感じでデータが入ります。
static long GetDirectorySize(string p)
{
// 1
// Get array of all file names.
string[] a = Directory.GetFiles(p, "*.*");
// 2
// Calculate total bytes of all files in a loop.
long b = 0;
foreach (string name in a)
{
// 3
// Use FileInfo to get length of each file.
FileInfo info = new FileInfo(name);
b += info.Length;
}
// 4
// Return total size
return b;
}