RE: معرفة حجم ملف - الشاكي لله - 29-12-13
(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)", KBLenght, ByteLenght) 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/0c899ak8(v=vs.110).aspx
****
***
**
*
ليش ماتسويها جدي :-
PHP كود :
Dim ByteLen As Long = 3245633333 Dim s As String = ByteLen.ToString("#,#")
MessageBox.Show(s) ''سيظهر 3,245,633,333'
RE: معرفة حجم ملف - kslawy - 29-12-13
كود مختصر وظريف
RE: معرفة حجم ملف - ali.alfoly - 30-12-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("#,#")
RE: معرفة حجم ملف - الشاكي لله - 30-12-13
(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 التي من خلالها تستطيع تحديد كم رقم تريده ان يظهر بعد الفاصلة العشرية
المشكلة الثانية :- طيب قسم النص كما ذكرت ! هل لاتستطيع ان تفعل ذلك !
RE: معرفة حجم ملف - ali.alfoly - 31-12-13
السلام عليكم
اخي الشاكي لله طيب عايز افهم علي اي اساس قام الاخ الفاضل بروف سيموس بعرض رقم واحد فقط بعد الفاصلة
طيب ولو الحساب بالميجا او الجيجا كم رقم يتم عرضه بعد الفاصلة
لا ادري لماذا الامر صعب لهذه الدرجة
طالما ان الويندوز قام بهذه العمليةاكيد في دوال api تقوم بذلك
الله المستعان
RE: معرفة حجم ملف - البروف سيمونس - 31-12-13
(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 / 1048576, 1) Dim KB As Long = (Math.Round(FilesInfo.Length / 1024, 1)) Dim Byt As Long = (Math.Round(FilesInfo.Length, 1)) Label2.Text = String.Format("Size : " & MB.ToString("#,#") & " MB " & KB.ToString("#,#") & " KB " & Byt.ToString("#,#") & " Bytes ")
لا اعلم ان كان هذا ما تريده ، ولكن مجرد محاولة لفصل الارقام بالفاصلة .
لك خالص تحياتي .
RE: معرفة حجم ملف - ali.alfoly - 31-12-13
المشكلة انظر الصورة
اريد ان اعرف كيف قام الويندوز بالحساب
RE: معرفة حجم ملف - الشاكي لله - 31-12-13
اشوف الموضوع طول مع انه بسيط !
شكلي بدخل الكومندوز ليكم
اخوي علي هذي الكلاس بنفكك من ازمتك :-
+ انا استبقت الاحداث وكتبت شرح الكود لأن ادري بتسألني بعدين  
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_Pattern, 2) 'عمل Power للرقم 1024' Shared ReadOnly GB_Length As Double = Math.Pow(Length_Pattern, 3) Shared ReadOnly TB_Length As Double = Math.Pow(Length_Pattern, 4)
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() {outLength, bestUnit.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
RE: معرفة حجم ملف - ali.alfoly - 01-01-14
جزاك الله خيرا اخي الشاكي لله
معلش تعبتك معي انتا والاخوة الافاضل
ما زالت المشكلة قائمة
اريد ان اعرف علي اي اساس يقوم بعرض رقم او رقمين بعد الفاصلة لان في الويندوز يقوم احيانا بالعرض واحيانا لايقوم مع ان الاحجام تكون تقريبا متقاربة
انتظر
لماذا في الحالة الاولي عرض اول رقم بعد الفاصلة وفي الحالة الثانية لم يعرضه
السلام عليكم
الحمد لله تعالي وصلت للحل وهو سهل جدا سبحان الله
القاعدة التي يتم علي اساسها عرض القيمة هي ان الرقم يجب ان يتكون من ثلاث ارقام فقط مثال
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 شكرا لاهتمامك ومساعدتك جزاك الله خيرا
الاخ الفاضل محمد . البروف سيمونس جزاك الله خيرا علي محاولاتك المتكررة وافكارك الجميلة جزاك الله خيرا
الاخ ناجي إبراهيم جزاك الله خيرا علي المعلومات القيمة
RE: معرفة حجم ملف - البروف سيمونس - 01-01-14
(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
تبارك الرحمن ما شاء الله ، يسعدني هذا الخبر أن هنالك نتائج جديدة بوصولك للهدف الذي تريده .. وحقاً انت جعلتنا نخوض في بحر هذا الشيء لكي نتعلم سر ظهورها بهذا الشكل والحمدلله وانت وصلت إلى ذلك .. 
ويستحق الكل الشكر وأنت اولهم على وصولك لهذا المنجز الذي سيفيدنا جميعاً ببرامجنا ..
فلك وللجميع خالص التحايا ..
محمد .
|