Vb.net Email gönderme programı için dosya boyutunu mb cinsinden elde etme nasıl?

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Email programım için gönderilecek dosyalar için maximum sınır koymak istiyorum ama insanlar byte 'dan kilobayttan anlamaz bu yüzden düz anlaşılır birşey yapmak istiyorum yani küçük bir textbox'a 10 yazıldığında 10MB limit koyucam 0,9 yazılırsa 1MB'yüde 90'i limit olsun işte problem elde ettiğim dosya boyutunu bu textbox'ta yazan rakamdan küçükse şunu yap büyükse şunu yap diye kodu yazıcam kodu yazmakta problemim yok hepsi kolay zor olan elde ettiğim dosya boyutu bilgisini bu textbox'taki formata çevirip bu değerleri < yada > diye değerlendirmek

Kodum aşağıda dosya boyutunu böyle elde ediyorum OpenFileDialog1 ile birden fazla dosya seçilirse döngü içinde her dosyanın boyutunu topluyorum ve döngüden çıkınca toplam dosya boyutunu elde etmiş oluyorum
Kod:
Dim fileDetail = My.Computer.FileSystem.GetFileInfo(Me.OpenFileDialog1.FileName)
Dim boyut As Long = fileDetail.Length

Aslında internetten bu konuda bir modül buldum ama 1MB değilse dosya boyutu KB cinsinden veriyor yada byte cinsinden veriyor böyle oluncada textbox'taki rakamla < yada > şeklinde karşılaştırma yapamıyorum

ModFilesizeConversion.vb
Kod:
Module ModFilesizeConversion
    ' Example Usage
    ' Dim fileSize As Long
    ' fileSize = My.Computer.FileSystem.GetFileInfo("Path to File").Length
    ' MessageBox.Show(ConvertSize(fileSize))

    Public Function ConvertSize(ByVal fileSize As Long) As String

        Dim sizeOfKB As Long = 1024 ' ****** size in bytes of 1KB
        Dim sizeOfMB As Long = 1048576 ' 1MB
        Dim sizeOfGB As Long = 1073741824 ' 1GB
        Dim sizeOfTB As Long = 1099511627776 ' 1TB
        Dim sizeofPB As Long = 1125899906842624 ' 1PB

        Dim tempFileSize As Double
        Dim tempFileSizeString As String

        Dim myArr() As Char = {CChar("0"), CChar(".")} 'Characters to strip off the end of our string after formating

        If fileSize < sizeOfKB Then 'Filesize is in Bytes
            tempFileSize = ConvertBytes(fileSize, convTo.B)
            If tempFileSize = -1 Then Return Nothing 'Invalid conversion attempted so exit
            tempFileSizeString = Format(fileSize, "Standard").TrimEnd(myArr) ' Strip the 0's and 1's off the end of the string
            Return Math.Round(tempFileSize) & " bytes" 'Return our converted value

        ElseIf fileSize >= sizeOfKB And fileSize < sizeOfMB Then 'Filesize is in Kilobytes
            tempFileSize = ConvertBytes(fileSize, convTo.KB)
            If tempFileSize = -1 Then Return Nothing 'Invalid conversion attempted so exit
            tempFileSizeString = Format(fileSize, "Standard").TrimEnd(myArr)
            Return Math.Round(tempFileSize) & " KB"

        ElseIf fileSize >= sizeOfMB And fileSize < sizeOfGB Then ' Filesize is in Megabytes
            tempFileSize = ConvertBytes(fileSize, convTo.MB)
            If tempFileSize = -1 Then Return Nothing 'Invalid conversion attempted so exit
            tempFileSizeString = Format(fileSize, "Standard").TrimEnd(myArr)
            Return Math.Round(tempFileSize, 1) & " MB"

        ElseIf fileSize >= sizeOfGB And fileSize < sizeOfTB Then 'Filesize is in Gigabytes
            tempFileSize = ConvertBytes(fileSize, convTo.GB)
            If tempFileSize = -1 Then Return Nothing
            tempFileSizeString = Format(fileSize, "Standard").TrimEnd(myArr)
            Return Math.Round(tempFileSize, 1) & " GB"

        ElseIf fileSize >= sizeOfTB And fileSize < sizeofPB Then 'Filesize is in Terabytes
            tempFileSize = ConvertBytes(fileSize, convTo.TB)
            If tempFileSize = -1 Then Return Nothing
            tempFileSizeString = Format(fileSize, "Standard").TrimEnd(myArr)
            Return Math.Round(tempFileSize, 1) & " TB"

            'Anything bigger than that is silly ;)

        Else

            Return Nothing 'Invalid filesize so return Nothing

        End If

    End Function

    Public Function ConvertBytes(ByVal bytes As Long, ByVal convertTo As convTo) As Double

        If convTo.IsDefined(GetType(convTo), convertTo) Then

            Return bytes / (1024 ^ convertTo)

        Else

            Return -1 'An invalid value was passed to this function so exit

        End If

    End Function

    Public Enum convTo
        B = 0
        KB = 1
        MB = 2
        GB = 3 'Enumerations for file size conversions
        TB = 4
        PB = 5
        EB = 6
        ZI = 7
        YI = 8
    End Enum
End Module
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
218
sen eline ne gelirse gelsin onu istediğin değer dönüştür. 1024 ile ya da genel kanı ile 1000 ile çarparak ve ya bölerek birim büyütme küçültme yapabilirsin.
MB * 1000 = gb ya da
MB / 1000 = KB gibi. zor bir işlem değil. Sen değerlerin olduğu kutulardan bağımsız olarak karşılaştırma metoduna tüm değerleri aynı formatta ilet. Kişileri sınırlama kendin esne. :)
 

algea

Doçent
Katılım
15 Temmuz 2011
Mesajlar
505
Reaksiyon puanı
22
Puanları
18
Tam ne yapmak istediğini anlamasam da sanırım geri dönen “n MB” şeklinde değerleri karşılaştırmak istediğini söylemişsin. Geri dönen değeri tekrar byte ‘a çevirip karşılaştırma yapabilirsin. Aşağıdaki kodu bir incele istersen.
Kod:
        Dim FileSize As Double = 0
        Dim FileSizeString As String = ""
        Dim myArray As String() = {}
        FileSizeString = ConvertSize(Long.Parse(TextBox1.Text))
        MsgBox(FileSizeString)
        myArray = FileSizeString.Split
        Select Case myArray(1)
            Case "bytes"
                FileSize = Double.Parse(myArray(0)) * (1024 ^ 0)
            Case "KB"
                FileSize = Double.Parse(myArray(0)) * (1024 ^ 1)
            Case "MB"
                FileSize = Double.Parse(myArray(0)) * (1024 ^ 2)
            Case "GB"
                FileSize = Double.Parse(myArray(0)) * (1024 ^ 3)
            Case "TB"
                FileSize = Double.Parse(myArray(0)) * (1024 ^ 4)
        End Select
        MsgBox(FileSize.ToString)
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Kafam çok karıştı keşke matematiğim iyi olsaydı
dosyanın boyutu bayt cinsinden veriyor sonra aşağıdaki kodla
mesajboxta şu çıkıyor ( 35611----10240 ) basamak basamak
saydığımızda uyuşmuyor yani 10MB 35KB'den küçük çıkıyor
Kod:
Dim mb As Integer = 10 ' Maksimum MB sınırı için girilen değer yani 10MB
MsgBox(DosyaBoyutu & "----" & mb * 1024)


Daha sonra kodu değiştiriyorum aşağıdaki gibi yapıyorum
Kod:
Dim mb As Integer = 10 ' Maksimum MB sınırı için girilen değer yani 10MB
MsgBox(DosyaBoyutu & "----" & mb / 1024)


Sonuç ( 35611----0,009765625 ) yine 10MB'den küçükmü
yoksa büyükmü dengesini kurabileceğim bir sonuç çıkmıyor tam olarak şunun
formülü nedir 10MB'yi kaça bölüp kaçla çarpıyoruz? DosyaBoyutu(35611) bu 10MB'dan küçükmü yaksa büyükmü yapabileyim
 

D_o_C_T_o_R

Öğrenci
Katılım
15 Mayıs 2009
Mesajlar
32
Reaksiyon puanı
0
Puanları
6
Kafam çok karıştı keşke matematiğim iyi olsaydı
dosyanın boyutu bayt cinsinden veriyor sonra aşağıdaki kodla
mesajboxta şu çıkıyor ( 35611----10240 ) basamak basamak
saydığımızda uyuşmuyor yani 10MB 35KB'den küçük çıkıyor
Kod:
Dim mb As Integer = 10 ' Maksimum MB sınırı için girilen değer yani 10MB
MsgBox(DosyaBoyutu & "----" & mb * 1024)


Daha sonra kodu değiştiriyorum aşağıdaki gibi yapıyorum
Kod:
Dim mb As Integer = 10 ' Maksimum MB sınırı için girilen değer yani 10MB
MsgBox(DosyaBoyutu & "----" & mb / 1024)


Sonuç ( 35611----0,009765625 ) yine 10MB'den küçükmü
yoksa büyükmü dengesini kurabileceğim bir sonuç çıkmıyor tam olarak şunun
formülü nedir 10MB'yi kaça bölüp kaçla çarpıyoruz? DosyaBoyutu(35611) bu 10MB'dan küçükmü yaksa büyükmü yapabileyim

Buradaki bahsettiğin hesap 10MB için değil 10 KB için yapılmış o yüzden de 10 KB, 35 KB tan küçük çıkıyor.

1 KB = 1024 Byte yapar
1 MB ise 1024 * 1024 Byte yapar yani katlar hep 1024 ile çarpılarak meydana gelir.
1 GB ise 1024 * 1024 * 1024 gibi devam eder yada başka bir değişle

1024 Byte = 1 KB
1024 KB = 1 MB
1024 MB = 1 GB şeklinde devam eder.

kısaca 10 MB lık işlem için 1024 * 1024 * 10 yapman gerekiyor.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Buradaki bahsettiğin hesap 10MB için değil 10 KB için yapılmış o yüzden de 10 KB, 35 KB tan küçük çıkıyor.

1 KB = 1024 Byte yapar
1 MB ise 1024 * 1024 Byte yapar yani katlar hep 1024 ile çarpılarak meydana gelir.
1 GB ise 1024 * 1024 * 1024 gibi devam eder yada başka bir değişle

1024 Byte = 1 KB
1024 KB = 1 MB
1024 MB = 1 GB şeklinde devam eder.

kısaca 10 MB lık işlem için 1024 * 1024 * 10 yapman gerekiyor.

Teşekkür ederim 1024 * 1024 * 10 başarıyla oldu
 
Üst