1

次の関数を呼び出して、特定のパスを確認し、指定されたパスにあるすべてのフォルダーからリストを取得します。フォルダーごとに、フォルダーのサイズを確認します。

これは、このようなフォルダーにファイルがある場合に機能します。

指定されたフォルダーパス\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;
        }
4

1 に答える 1

1

ラインを交換してみる

DirectoryInfo[] diArr = di.GetDirectories();

DirectoryInfo[] diArr = di.GetDirectories("*", SearchOption.AllDirectories);

指定されたディレクトリに含まれるすべてのディレクトリを反復処理する必要があります。MSDN: DirectoryInfo.GetDirectories Method (String, SearchOption)およびMSDN: SearchOptionを参照してください。

于 2012-12-18T10:11:43.033 に答える