webForumDet fria alternativet

Konvertera till MB/GB/KB

.NET

3 svar · 809 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

håller på att göra om en funktion från ASP till C#
Grundkoden:

Function ConvFileSize (FileSize, Decimaler)
	Dim DotPos, strFileSize
	FileSize = cDbl(FileSize)

	' Gigabytes.
	If FileSize >= 1048576000 Then
		strFileSize = cStr(cSng(FileSize / 1048576000))
		DotPos = Instr(strFileSize, ".")
		IF DotPos THEN
			IF Decimaler = 0 THEN Decimaler = -1
			strFileSize = MID(strFileSize, 1, DotPos + Decimaler)
		END IF
		strFileSize = strFileSize + " gb"
	' Megabytes.
	ElseIf FileSize >= 1048576 THEN
		strFileSize = cStr(cSng(FileSize / 1048576))
		DotPos = Instr(strFileSize, ".")
		IF DotPos THEN
			IF Decimaler = 0 THEN Decimaler = -1
			strFileSize = MID(strFileSize, 1, DotPos + Decimaler)
		END IF
		strFileSize = strFileSize + " mb"
	' Kilboytes.
	ElseIf FileSize >= 1024 THEN
		strFileSize = cStr(cSng(FileSize / 1024))
		DotPos = InStr(strFileSize, ".")
		IF DotPos THEN
			IF Decimaler = 0 THEN Decimaler = -1
			strFileSize = MID(strFileSize, 1, DotPos + Decimaler)
		END IF
		strFileSize = strFileSize + " kb"
	' Bytes.
	Else
		IF FileSize > 1 THEN
			strFileSize = cStr(Int(FileSize)) + " b"
		ELSE
			strFileSize = cStr(Int(FileSize)) + " b"
		END IF
	END IF
	
	ConvFileSize = Trim(strFileSize)

End Function

Min kod:

		public string ConvFileSize(int FileSize,int Decimaler)
		{
			double mySize = Convert.ToDouble(FileSize);
			string strFileSize;
			int DotPos;
			int gb=1048576000,mb=1048576,kb=1024;

			//Gigabytes.
			if(mySize >= gb)
			{
				strFileSize = Convert.ToString(Convert.ToSingle(mySize / gb));
				DotPos = strFileSize.IndexOf(".",0);
				if(DotPos>0)
				{
					if(Decimaler == 0)
						Decimaler = -1;
					strFileSize = strFileSize.Substring(1, DotPos + Decimaler);
				}
				strFileSize = strFileSize + " gb";
			}
			//Megabytes.
			else if(FileSize >= mb)
			{
				strFileSize = Convert.ToString(Convert.ToSingle(mySize / mb));
				DotPos = strFileSize.IndexOf(".",0);
				if(DotPos>0)
				{
					if(Decimaler == 0)
						Decimaler = -1;
					strFileSize = strFileSize.Substring(1, DotPos + Decimaler);
				}
				strFileSize = strFileSize + " mb";
			}
			//Kilboytes.
			else if(mySize >= kb)
			{
				strFileSize = Convert.ToString(Convert.ToSingle(mySize / kb));
				DotPos = strFileSize.IndexOf(".",0);
				if(DotPos>0)
				{
					if(Decimaler == 0)
						Decimaler = -1;
					strFileSize = strFileSize.Substring(1, DotPos + Decimaler);
				}
				strFileSize = strFileSize + " kb";
			}
			//Bytes.
			else
			{
				if(mySize > 1)
					strFileSize = Convert.ToString(Convert.ToInt32(FileSize)) + " b";
				else
					strFileSize = Convert.ToString(Convert.ToInt32(FileSize)) + " b";
			}
			return strFileSize.Trim();
		}

Men jag får ut:
.36 mb
när jag skickar in: 1433206 och 2 (decimaler)
och när jag provade med det här:

MMPath storlek = new MMPath();
int dec=2;
storlek.ConvFileSize(Convert.ToInt32(rS["MDownSize"].ToString()),dec);

Så fick jag felet:
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string. Parameter name: length

Vad gör jag fel?

Medlem sedan apr. 20012 266 inlägg
#2

Denna kanske kan hjälpa dig? :)
http://www.webforum.nu/showthread.php?s=&postid=723735#post723735

Medlem sedan juni 20034 013 inlägg
#3

Re: Konvertera till MB/GB/KB

Varför så mycket krångligt tjafs? Skulle inte där net förenkla? ;-)

  char NiceSize[12];
  double size;
  if (size > 1073741824)
  {
    size /= 1073741824;
    sprintf(NiceSize, "%5.2f GB", size);
  }
  elseif (size > 1048576)
  {
    size /= 1048576;
    sprintf(NiceSize, "%5.2f MB", size);
  }
  else if (size > 1024)
  {
    size /= 1024;
    sprintf(NiceSize, "%3.2f kB", size);
  }
  else
    sprintf(NiceSize, "%4.0f bytes", size);

> http://www.webforum.nu/showthread.p...3735#post723735

Ja, jag tänkte väl att det måste gå att göra på något liknande sätt.

Medlem sedan jan. 20013 341 inlägg
#4

Missade att nån hade svarat i den :r :e

270 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)