Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0447: Dateigrößen umrechnen(Byte, Kilobyte, Megabyte)

 von 

Beschreibung 

Wie Sie dem User bei großen Dateien die Größe in eine größeren Einheit als Byte darstellen, zeigt dieser Tipp.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,63 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (COMDLG32.OCX)' wird benötigt.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Rahmensteuerelement "Frame1"
' Steuerelement: Beschriftungsfeld "lblKB" auf Frame1
' Steuerelement: Beschriftungsfeld "lblB" auf Frame1
' Steuerelement: Beschriftungsfeld "lblMBytes" auf Frame1
' Steuerelement: Beschriftungsfeld "lblKBytes" auf Frame1
' Steuerelement: Beschriftungsfeld "lblBytes" auf Frame1
' Steuerelement: Beschriftungsfeld "lblMB" auf Frame1
' Steuerelement: Textfeld "Text1"
' Steuerelement: Standarddialog-Steuerelement "CommonDialog1"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Beschriftungsfeld "Label2"
Option Explicit
'//Beispiel zur Dateigrößenumrechnung (in KBytes & MBytes)
'//Autor: Sebastian B.
'//E-Mail: sebastian.ba@gmx.de

Private Sub Command1_Click()
    Dim strFileName As String
    
    With CommonDialog1
        .Filter = "Alle Dateien (*.*)|*.*"
        .FilterIndex = 1
        .ShowOpen
        
        '// Dateigröße in Bytes auslesen
        strFileName = FileLen(.FileName)
        Text1.Text = .FileName
        
        '//Dateigröße in Bytes ausgeben
        lblB.Caption = strFileName
        
        If lblB.Caption < 1000000 Then
            lblKB.Caption = strFileName / 1024
            lblKB.Caption = Mid(lblKB.Caption, 1, 5)
            
        Else
            '// Dateigröße in KBytes ausgeben
            '// Dateigröße in Bytes mit 1024 dividieren, da 1Kb = 1024Bytes
            lblKB.Caption = strFileName / 1024
            lblKB.Caption = Mid(lblKB.Caption, 1, 5)
        End If
        
        If lblKB.Caption < 1024 Then
            lblMB.Caption = "---"
            
        Else
            '// Dateigröße in MBytes ausgeben
            '// Dateigröße in Bytes mit 1048576 dividieren, da 1024 * 1024 = 1048576
            lblMB.Caption = strFileName / 1048576
            lblMB.Caption = Mid(lblMB.Caption, 1, 4)
        End If
        
    End With
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 6 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Jens am 02.02.2007 um 13:54

Dann probiere mal folgenden Code aus:

Public Function FileSize(ByVal sFile As String) As Currency
' Größe einer Datei ermitteln
' funktioniert bis 4 GB!
Dim nSize As Long

On Error Resume Next
If Dir$(sFile) <> "" Then
nSize = FileLen(sFile)
If Err.Number <> 0 Then
' Fehler: evtl. ist Datei größer als 4 GB
FileSize = 2147483648# + 2147483648#
Else
If nSize < 0 Then
' Datei ist größer als 2GB!
FileSize = 2147483648# + (2147483648# - Abs(nSize))
Else
FileSize = nSize
End If
End If
Else
' Falls Datei nicht gefunden,
' -1 als Wert zurückgeben
FileSize = -1
End If
On Error Goto 0
End Function

Kommentar von LinkeT am 02.02.2007 um 13:34

so bald eine datei über 2GB gross ist liefert CommonDialog1.filelen einen negativen wert was au den werte bereich einer 32bit zurückzuführen ist -> der "fehler" liegt bei der api -> eine andere API muss her

das umrechnen ist schon mal ganz ok geht auch nicht einfacher ;) double ist glaube auch ganz ok aber wenns von der falschen api aufgrufen wird ist es ...

MfG

Kommentar von Jens am 02.02.2007 um 13:04

Ich habe mir vor lange Zeit folgende Funktion hierzu geschrieben, vielleicht kann man das obrige Beispiel etwas modifizieren, da es in der Tat keine Werte in 'Gigabyte' umrechnet. Da wahrscheinlich bald die ersten Terabyte-Laufwerke im Handel erhältlich sind, wird auch meine Funktion "überfordert" sein ;-)

Private Function Umrechnen(ByVal nSize As Double) As String

Select Case nSize

' Gigabytebereich
Case Is >= 1024 ^ 3

nSize = nSize / 1024 ^ 3
If nSize < 10 Then
Umrechnen = Format$(nSize, "0.00 \GB")
ElseIf nSize < 100 Then
Umrechnen = Format$(nSize, "0.0 \GB")
Else
Umrechnen = Format$(Fix(nSize), "0 \GB")
End If


' Megabytebereich
Case Is >= 1024 ^ 2
nSize = nSize / 1024 ^ 2
If nSize < 10 Then
Umrechnen = Format$(nSize, "0.00 \MB")
ElseIf nSize < 100 Then
Umrechnen = Format$(nSize, "0.0 \MB")
Else
Umrechnen = Format$(Fix(nSize), "0 \MB")
End If


' Kilobytebereich
Case Is >= 1024
nSize = nSize / 1024
Umrechnen = Format$(nSize, "0.0 \KB")


' Bytebereich
Case Else
Umrechnen = Format$(nSize, "0") & " Byte"

End Select

End Function

Kommentar von LinkeT am 18.01.2006 um 17:04

bei grösseren dateien (im gb bereich) funzt es nicht... also ist es nicht wirklich brauchbar

Kommentar von asdf am 05.12.2002 um 17:58

wieviel sind 600kb in megabyte

Kommentar von LGm am 11.03.2002 um 11:55

Hi!
Ist die Abfrage "If lblB.Caption