System.IO.File.GetLength以字节为单位给出了文件的大小。我试图做的是取大小,以字节为单位,并将其转换为可能的最高单位,而不要让大小变得小于1.例如,而不是" 2048"显示在大小列中,我想要" 2 KB"显示。这是代码:
private string sizeDown(string size)
{
decimal sizeoffile = Convert.ToDecimal(size);
int downed = 0;
do
{
sizeoffile = sizeoffile / 1024;
downed += 1;
}
while (sizeoffile > 1024);
if (downed > 3)
{
return "";
}
else
{
switch (downed)
{
case 0:
return Convert.ToString(sizeoffile) + " bytes";
break;
case 1:
return Convert.ToString(sizeoffile) + " KB";
break;
case 2:
return Convert.ToString(sizeoffile) + " MB";
break;
case 3:
return Convert.ToString(sizeoffile) + " GB";
}
}
}
但是,正如您可能从标题中看到的那样,Visual Studio告诉我并非所有代码路径都返回一个值。我很困惑。什么大小的值可能导致我的代码没有返回值?
(顺便说一句,我知道我把字符串作为字符串,然后将其转换为小数 - 为方便起见,我这样做。)
答案 0 :(得分:0)
更改以下行集
if (downed > 3)
{
return "";
}
else
{
switch (downed)
{
case 0:
return Convert.ToString(sizeoffile) + " bytes";
break;
case 1:
return Convert.ToString(sizeoffile) + " KB";
break;
case 2:
return Convert.ToString(sizeoffile) + " MB";
break;
case 3:
return Convert.ToString(sizeoffile) + " GB";
}
}
到
switch (downed)
{
case 0:
return Convert.ToString(sizeoffile) + " bytes";
break;
case 1:
return Convert.ToString(sizeoffile) + " KB";
break;
case 2:
return Convert.ToString(sizeoffile) + " MB";
break;
case 3:
return Convert.ToString(sizeoffile) + " GB";
default : return "";
}
}
答案 1 :(得分:0)
将此代码与Switch .... Case
一起使用 private string sizeDown(string size)
{
decimal sizeoffile = Convert.ToDecimal(size);
int downed = 0;
do
{
sizeoffile = sizeoffile / 1024;
downed += 1;
}
while (sizeoffile > 1024);
switch (downed)
{
case 0:
return Convert.ToString(sizeoffile) + " bytes";
break;
case 1:
return Convert.ToString(sizeoffile) + " KB";
break;
case 2:
return Convert.ToString(sizeoffile) + " MB";
break;
case 3:
return Convert.ToString(sizeoffile) + " GB";
break;
default:
return "";
break;
}
}
答案 2 :(得分:0)
此处出现错误的原因是编译器无法知道将在运行时确定的值,因为它将被确定。即使您知道运行时值永远不会达到它,您也需要为每个值都有一个代码路径。正如其他回复中所提到的,你可以在你的交换机中添加一个默认的返回值,或者你可以抛出异常,如果它是你不希望被击中的条件。
switch (downed)
{
case 0:
return Convert.ToString(sizeoffile) + " bytes";
break;
case 1:
return Convert.ToString(sizeoffile) + " KB";
break;
case 2:
return Convert.ToString(sizeoffile) + " MB";
break;
case 3:
return Convert.ToString(sizeoffile) + " GB";
default:
throw new InvalidOperationException();
}
答案 3 :(得分:0)
首先:downed
>时,您的开关案例不会返回任何内容那就是导致错误的原因。其次,您的解决方案将因字节而失败。删除do
关键字并将其替换为while
语句。
与其他人相比,创造一个完全不同的答案:
private string sizeDown(string size)
{
long sizeOfFile = long.Parse(size);
if (sizeOfFile == 1)
return sizeOfFile + " byte";
if (sizeOfFile < 1024)
return sizeOfFile + " bytes";
if (sizeOfFile < 1024 * 1024)
return sizeOfFile / 1024 + " KB";
if (sizeOfFile < 1024 * 1024 * 1024)
return sizeOfFile / (1024 * 1024) + " MB";
if (sizeOfFile < 1024 * 1024 * 1024 * 1024)
return sizeOfFile / (1024 * 1024 * 1024) + " GB";
return sizeOfFile / (1024 * 1024 * 1024 * 1024) + " TB";
}