تقييم الموضوع :
  • 3 أصوات - بمعدل 3.67
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] معرفة حجم ملف
#11
(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
الرد }}}
تم الشكر بواسطة: ali.alfoly
#12
كود مختصر وظريف
(وَقُل رَّبِّ زِدْنِي عِلْمًا)

الرد }}}
تم الشكر بواسطة: ali.alfoly
#13
السلام عليكم ورحمة الله وبركاته
جزاكم الله خيرا اخواني جميعا واسئل الله تعالي ان يجزيكم عني خيرا
يبدو ان محدش خد بالو من الكود
اخواني ارجو مراجعة هذا الكود

كود :
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("#,#")
الرد }}}
تم الشكر بواسطة:
#14
(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 التي من خلالها تستطيع تحديد كم رقم تريده ان يظهر بعد الفاصلة العشرية

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

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

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

الله المستعان
الرد }}}
تم الشكر بواسطة:
#16
(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  "

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

لك خالص تحياتي .
قــراءة حــجــازية
سبحان الله وبحمده ، سبحان الله العظيم
فيس بوك
الرد }}}
تم الشكر بواسطة: ali.alfoly
#17
المشكلة انظر الصورة
اريد ان اعرف كيف قام الويندوز بالحساب

الرد }}}
تم الشكر بواسطة:
#18
اشوف الموضوع طول مع انه بسيط !

شكلي بدخل الكومندوز ليكم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 
الرد }}}
تم الشكر بواسطة: mamas1 , kslawy , البروف سيمونس , ali.alfoly
#19
جزاك الله خيرا اخي الشاكي لله
معلش تعبتك معي انتا والاخوة الافاضل
ما زالت المشكلة قائمة
اريد ان اعرف علي اي اساس يقوم بعرض رقم او رقمين بعد الفاصلة لان في الويندوز يقوم احيانا بالعرض واحيانا لايقوم مع ان الاحجام تكون تقريبا متقاربة
انتظر



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

السلام عليكم
الحمد لله تعالي وصلت للحل وهو سهل جدا سبحان الله
القاعدة التي يتم علي اساسها عرض القيمة هي ان الرقم يجب ان يتكون من ثلاث ارقام فقط مثال
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 شكرا لاهتمامك ومساعدتك جزاك الله خيرا
الاخ الفاضل محمد . البروف سيمونس جزاك الله خيرا علي محاولاتك المتكررة وافكارك الجميلة جزاك الله خيرا
الاخ ناجي إبراهيم جزاك الله خيرا علي المعلومات القيمة
الرد }}}
تم الشكر بواسطة: البروف سيمونس , kslawy , الشاكي لله
#20
(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
ويستحق الكل الشكر وأنت اولهم على وصولك لهذا المنجز الذي سيفيدنا جميعاً ببرامجنا ..
فلك وللجميع خالص التحايا ..
محمد .
قــراءة حــجــازية
سبحان الله وبحمده ، سبحان الله العظيم
فيس بوك
الرد }}}
تم الشكر بواسطة: ali.alfoly , kslawy , الشاكي لله



التنقل السريع :


يقوم بقرائة الموضوع: