Измерение fileinfo.Length объектов в килобайтах - PullRequest
3 голосов
/ 29 июня 2009

У меня есть следующий код:

foreach (string p in dirs)
        {
            string path = p;
            string lastAccessTime = File.GetLastAccessTime(path).ToString();
            bool DirFile = File.Exists(path);
            FileInfo fInf = new FileInfo(path);

            DateTime lastWriteTime = File.GetLastWriteTime(p);
            dirFiles.Add(p + "|" + lastAccessTime.ToString() + "|" + DirFile.ToString() + "|" + lastWriteTime.ToString() + "|" + fInf.Length.ToString());


        }

У меня есть функция fInf.Length.ToString (), и я хотел бы измерить вывод в килобайтах. Любые идеи о том, как это сделать? Например, вместо 2048 в качестве размера файла, я хотел бы просто получить 2Kb.

Заранее спасибо за помощь

Ответы [ 3 ]

17 голосов
/ 29 июня 2009

Вот как можно разбить его на гигабайты, мегабайты или килобайты:

string sLen = fInf.Length.ToString();
if (fInf.Length >= (1 << 30))
    sLen = string.Format("{0}Gb", fInf.Length >> 30);
else
if (fInf.Length >= (1 << 20))
    sLen = string.Format("{0}Mb", fInf.Length >> 20);
else
if (fInf.Length >= (1 << 10))
    sLen = string.Format("{0}Kb", fInf.Length >> 10);

sLen будет ваш ответ. Вы можете заключить его в функцию и просто передать объект Length или даже объект FileInfo.

Если вместо «настоящих» килобайт вы хотели бы получить его в единицах байтов по 1000, вы можете заменить 1 << 10 и >> 10 на 1000 и /1000 соответственно, и аналогично для других, использующих 1000000 и 1000000000. .

7 голосов
/ 29 июня 2009

Если вы хотите, чтобы длина была (длинным) целым числом:

long lengthInK = fInf.Length / 1024;
string forDisplay = lengthInK.ToString("N0") + " KB";    // eg, "48,393 KB"

Если вы хотите, чтобы длина была плавающей точкой:

float lengthInK = fInf.Length / 1024f;
string forDisplay = lengthInK.ToString("N2") + " KB";    // eg, "48,393.68 KB"
3 голосов
/ 29 июня 2009

Попробуйте строку ниже:

string sizeInKb = string.Format("{0} kb", fileInfo.Length / 1024);
...