منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : معرفة حجم ملف
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
(29-12-13, 01:26 PM)kslawy كتب : [ -> ]السلام عليكم ورحمة الله وبركاته

واجهتني المشكلة في تقسم حجم الملف الأصلي (غير المقسوم) لا ينقسم أبدا لهذه الطريقة ("00.000") دائما يظهر كامل ولكنني قسمته باستخدام العلامة (",") بدلاً عن (النقطة) وعند الرجوع بالدالة يتم استبدال (,) بالنقطة
PHP كود :
Private Function GetFileLenght(ByVal filePath As String) As String
        Dim FileLen 
As String ""
        
Try
            
Dim fi As IO.FileInfo = New IO.FileInfo(filePath)

            
Dim ByteLenght As Long fi.Length
            Dim KBLenght 
As Long fi.Length 1024

            FileLen 
String.Format("Size : {0:00.0} KB ({1:00,000} Bytes)"KBLenghtByteLenght)
            Return 
FileLen.Replace(",""."' لم يتقسم النص الأخير إلا بوضع العلامة التي ستستبدل هنا
        Catch ex As Exception
            MsgBox(ex.Message, 48, "Get File Lenght")
            Return ""
        End Try
    End Function 


http://msdn.microsoft.com/en-us/library/....110).aspx

****
***
**
*


ليش ماتسويها جدي :-

PHP كود :
Dim ByteLen As Long 3245633333
Dim s 
As String ByteLen.ToString("#,#")

MessageBox.Show(s)    ''سيظهر 3,245,633,333
كود مختصر وظريف
السلام عليكم ورحمة الله وبركاته
جزاكم الله خيرا اخواني جميعا واسئل الله تعالي ان يجزيكم عني خيرا
يبدو ان محدش خد بالو من الكود
اخواني ارجو مراجعة هذا الكود

كود :
Private Function GetFileSize(ByVal FilePath As String) As String
        Try
            Dim Txt_Siz As String = ""

            Dim Length As Long = New IO.FileInfo(FilePath).Length

            If Length < 1024 Then
                Txt_Siz = Length & " Bytes"
            ElseIf Length < 1048576 Then
                Txt_Siz = (Length / 1024) & " KB"
            ElseIf Length < 1073741824 Then
                Txt_Siz = (Length / 1024 / 1024) & " MB"
            ElseIf Length >= 1073741824 Then
                Txt_Siz = (Length / 1024 / 1024 / 1024) & " GB"
            End If

            Return Txt_Siz

        Catch ex As Exception
        End Try
        Return ""
    End Function


الكود يوجد به مشكلتان الاولي
عند وضع مسار ملف حجمه 7.34 mb
يعود بـ 7.34833717346191 MB

المشكلة الثانية تقسيم النص مثل ما وضخ الاخ الشاكي لله .ToString("#,#")
(30-12-13, 02:54 AM)ali.alfoly كتب : [ -> ]السلام عليكم ورحمة الله وبركاته
جزاكم الله خيرا اخواني جميعا واسئل الله تعالي ان يجزيكم عني خيرا
يبدو ان محدش خد بالو من الكود
اخواني ارجو مراجعة هذا الكود

كود :
Private Function GetFileSize(ByVal FilePath As String) As String
        Try
            Dim Txt_Siz As String = ""

            Dim Length As Long = New IO.FileInfo(FilePath).Length

            If Length < 1024 Then
                Txt_Siz = Length & " Bytes"
            ElseIf Length < 1048576 Then
                Txt_Siz = (Length / 1024) & " KB"
            ElseIf Length < 1073741824 Then
                Txt_Siz = (Length / 1024 / 1024) & " MB"
            ElseIf Length >= 1073741824 Then
                Txt_Siz = (Length / 1024 / 1024 / 1024) & " GB"
            End If

            Return Txt_Siz

        Catch ex As Exception
        End Try
        Return ""
    End Function


الكود يوجد به مشكلتان الاولي
عند وضع مسار ملف حجمه 7.34 mb
يعود بـ 7.34833717346191 MB

المشكلة الثانية تقسيم النص مثل ما وضخ الاخ الشاكي لله .ToString("#,#")

المشكلة الاولى حلها مثل ماسوا الاخ بروف سيموس ، حيث استخدم Math.Round التي من خلالها تستطيع تحديد كم رقم تريده ان يظهر بعد الفاصلة العشرية

المشكلة الثانية :- طيب قسم النص كما ذكرت ! هل لاتستطيع ان تفعل ذلك !
السلام عليكم
اخي الشاكي لله طيب عايز افهم علي اي اساس قام الاخ الفاضل بروف سيموس بعرض رقم واحد فقط بعد الفاصلة
طيب ولو الحساب بالميجا او الجيجا كم رقم يتم عرضه بعد الفاصلة

لا ادري لماذا الامر صعب لهذه الدرجة

طالما ان الويندوز قام بهذه العمليةاكيد في دوال api تقوم بذلك

الله المستعان
(30-12-13, 02:54 AM)ali.alfoly كتب : [ -> ]السلام عليكم ورحمة الله وبركاته
جزاكم الله خيرا اخواني جميعا واسئل الله تعالي ان يجزيكم عني خيرا
يبدو ان محدش خد بالو من الكود
اخواني ارجو مراجعة هذا الكود

الكود يوجد به مشكلتان الاولي
عند وضع مسار ملف حجمه 7.34 mb
يعود بـ 7.34833717346191 MB

المشكلة الثانية تقسيم النص مثل ما وضخ الاخ الشاكي لله .ToString("#,#")
بالنسبة للكود الخاص بك ممكن يصبح هكذا بعد وضع عملية تقسيم النص ، بحيث أن لا يعود النتيجة بهذا الشكل 7.34833717346191 MB :
PHP كود :
If Length 1024 Then
                Txt_Siz 
Length.ToString("#,#") & " Bytes"
            
ElseIf Length 1048576 Then
                Txt_Siz 
= (Length 1024).ToString("#,#") & " KB"
            
ElseIf Length 1073741824 Then
                Txt_Siz 
= (Length 1024 1024).ToString("#,#") & " MB"
            
ElseIf Length >= 1073741824 Then
                Txt_Siz 
= (Length 1024 1024 1024) & " GB"
            
End If 

طبقت هذا لكودك بعد أن توصلت إلى نتيجة أخرى بوضع الفاصلة من خلال ما طرحه أخي الشاكي لله في هذا النموذج :


حيث أن الكود أصبح كالتالي :
PHP كود :
Dim MB As Long Math.Round(FilesInfo.Length 10485761)
            
Dim KB As Long = (Math.Round(FilesInfo.Length 10241))
            
Dim Byt As Long = (Math.Round(FilesInfo.Length1))
            
Label2.Text String.Format("Size : " MB.ToString("#,#") & "  MB  " KB.ToString("#,#") & "  KB  " Byt.ToString("#,#") & "   Bytes  "

لا اعلم ان كان هذا ما تريده ، ولكن مجرد محاولة لفصل الارقام بالفاصلة .

لك خالص تحياتي .
المشكلة انظر الصورة
اريد ان اعرف كيف قام الويندوز بالحساب

اشوف الموضوع طول مع انه بسيط !

شكلي بدخل الكومندوز ليكمBig Grin

اخوي علي هذي الكلاس بنفكك من ازمتك :-

+ انا استبقت الاحداث وكتبت شرح الكود لأن ادري بتسألني بعدين Big GrinBig Grin

PHP كود :
Public Class FileSize
    
Const Length_Pattern As Integer 1024
    Shared ReadOnly Byte_Length 
As Integer 0
    Shared ReadOnly KB_Length 
As Double Length_Pattern
    Shared ReadOnly MB_Length 
As Double Math.Pow(Length_Pattern2)     'عمل Power للرقم 1024'
    
Shared ReadOnly GB_Length As Double Math.Pow(Length_Pattern3)
    
Shared ReadOnly TB_Length As Double Math.Pow(Length_Pattern4)

    Private 
Enum Unit
        
[Byte]
        
KB
        MB
        GB
        TB
    End Enum

    
''' <summary>
    ''' 
جلب حجم الملف كما في الوندوز
    
''' </summary>
    ''' 
<param name="filePath">مسار الملف</param>
    
''' <returns></returns>'''
    
Public Shared Function GetFileSize(filePath As String) As String
        Dim fileLength 
As Long = New System.IO.FileInfo(filePath).Length   'طول الملف الاصلي'
        
Dim computeLength As Double 0
        Dim bestUnit 
As Unit GetBestUnit(fileLength)
        
'جلب افضل وحدة للعرض'
        
Select Case bestUnit
            
Case Unit.[Byte]
                Return 
fileLength.ToString("#,#") & " bytes"
            
Case Unit.KB
                computeLength 
fileLength KB_Length
                
Exit Select
            
Case Unit.MB
                computeLength 
fileLength MB_Length
                
Exit Select
            
Case Unit.GB
                computeLength 
fileLength GB_Length
                
Exit Select
            
Case Unit.TB
                computeLength 
fileLength TB_Length
                
Exit Select
        End Select

                
'بتر الارقام لتصبح خانتين بعد الفاصلة' 
        
Dim outLength As Double Math.Truncate(100 computeLength) / 100
        Dim outText 
As String String.Format("{0} {1} ({2} bytes)"
                              New 
Object() {outLengthbestUnit.ToString(), fileLength.ToString ("#,#")})
        
         Return 
outText
    End 
Function

    Private 
Shared Function GetBestUnit(fileLength As Long) As Unit
        
'اختيار الوحدة الافضل للعرض'
        
If fileLength >= Byte_Length AndAlso fileLength KB_Length Then
            
Return Unit.[Byte]
        ElseIf 
fileLength >= KB_Length AndAlso fileLength MB_Length Then
            
Return Unit.KB
        
ElseIf fileLength >= MB_Length AndAlso fileLength GB_Length Then
            
Return Unit.MB
        
ElseIf fileLength >= GB_Length AndAlso fileLength TB_Length Then
            
Return Unit.GB
        
ElseIf fileLength >= TB_Length Then
            
Return Unit.TB
        
Else
            Return 
Unit.MB        'default '
        
End If
    
End Function
End Class 
جزاك الله خيرا اخي الشاكي لله
معلش تعبتك معي انتا والاخوة الافاضل
ما زالت المشكلة قائمة
اريد ان اعرف علي اي اساس يقوم بعرض رقم او رقمين بعد الفاصلة لان في الويندوز يقوم احيانا بالعرض واحيانا لايقوم مع ان الاحجام تكون تقريبا متقاربة
انتظر



لماذا في الحالة الاولي عرض اول رقم بعد الفاصلة وفي الحالة الثانية لم يعرضه

السلام عليكم
الحمد لله تعالي وصلت للحل وهو سهل جدا سبحان الله
القاعدة التي يتم علي اساسها عرض القيمة هي ان الرقم يجب ان يتكون من ثلاث ارقام فقط مثال
12.2
1.22
122
هههههه طبعا مش مسدق نفسي قاعدة غريبة جدا
انظر الدالة الاخيرة

كود :
Private Function GetFileSize(ByVal FilePath As String) As String
        Try
            Dim Length As Long = New IO.FileInfo(FilePath).Length
            Dim Le_Byt As String = "(" & Length.ToString("#,#") & "  Bytes)"
            '
            If Length < 1024 Then
                Return Le_Byt
            ElseIf Length < 1048576 Then
                Return Set3Byt(Length / 1024) & " KB   " & Le_Byt
            ElseIf Length < 1073741824 Then
                Return Set3Byt(Length / 1048576) & " MB   " & Le_Byt
            ElseIf Length >= 1073741824 Then
                Return Set3Byt(Length / 1073741824) & " GB   " & Le_Byt
            End If
        Catch ex As Exception
        End Try
        Return ""
    End Function

    Private Function Set3Byt(nmpt As String) As String
        Dim txt As String = ""
        Dim str As Byte = 0
        For Each Cr As Char In nmpt
            txt += Cr
            If Cr <> "." Then str += 1
            If str = 3 Then Exit For
        Next
        Return txt
    End Function
الشكر موصول للاخوة الافاضل
الاخ الحبيب الي قلبي جدا محمد . الشاكي لله (السيرقر الذكي ) .... (جاري البحث ... طبعا انتا فقط الي فاهم اللغة دي هههه جزاك الله خيرا
الاخ الكريم معاذ . kslawy شكرا لاهتمامك ومساعدتك جزاك الله خيرا
الاخ الفاضل محمد . البروف سيمونس جزاك الله خيرا علي محاولاتك المتكررة وافكارك الجميلة جزاك الله خيرا
الاخ ناجي إبراهيم جزاك الله خيرا علي المعلومات القيمة
(01-01-14, 03:53 AM)ali.alfoly كتب : [ -> ]السلام عليكم
الحمد لله تعالي وصلت للحل وهو سهل جدا سبحان الله
القاعدة التي يتم علي اساسها عرض القيمة هي ان الرقم يجب ان يتكون من ثلاث ارقام فقط مثال
12.2
1.22
122
هههههه طبعا مش مسدق نفسي قاعدة غريبة جدا
انظر الدالة الاخيرة

كود :
Private Function GetFileSize(ByVal FilePath As String) As String
        Try
            Dim Length As Long = New IO.FileInfo(FilePath).Length
            Dim Le_Byt As String = "(" & Length.ToString("#,#") & "  Bytes)"
            '
            If Length < 1024 Then
                Return Le_Byt
            ElseIf Length < 1048576 Then
                Return Set3Byt(Length / 1024) & " KB   " & Le_Byt
            ElseIf Length < 1073741824 Then
                Return Set3Byt(Length / 1048576) & " MB   " & Le_Byt
            ElseIf Length >= 1073741824 Then
                Return Set3Byt(Length / 1073741824) & " GB   " & Le_Byt
            End If
        Catch ex As Exception
        End Try
        Return ""
    End Function

    Private Function Set3Byt(nmpt As String) As String
        Dim txt As String = ""
        Dim str As Byte = 0
        For Each Cr As Char In nmpt
            txt += Cr
            If Cr <> "." Then str += 1
            If str = 3 Then Exit For
        Next
        Return txt
    End Function
تبارك الرحمن ما شاء الله ، يسعدني هذا الخبر أن هنالك نتائج جديدة بوصولك للهدف الذي تريده .. وحقاً انت جعلتنا نخوض في بحر هذا الشيء لكي نتعلم سر ظهورها بهذا الشكل والحمدلله وانت وصلت إلى ذلك .. Smile
ويستحق الكل الشكر وأنت اولهم على وصولك لهذا المنجز الذي سيفيدنا جميعاً ببرامجنا ..
فلك وللجميع خالص التحايا ..
محمد .
الصفحات : 1 2