ايران ويج

نسخه‌ی کامل: File Size
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام

اگر با استفاده از FSO و زير شاخه هاي آن حجم فايلي را دريافت كنيم در صورتي كه حجم فايل به چند گيگابايت برسد پيغام خطاي overfollow نمايش داده مي شود. چه راهي پيشنهاد مي كنيد؟
تا حالا فايلي تا اين اندازه سنگين باهاش باز نكردم ولي از اونجائي كه حجم فايل رو به بايت مي ده خوب تقريبا چندگيگابايت رو نمي شه تو هر متغييري جا داد. شايد بهتر باشه از انواع ديگه اي از متغيير عددي استفاده كني يا مستقيما اون رو با دستور Cstr تبديل به استرينگش كني.
سلام.
من فایل چند گیگی دیدم.
یادمه چند سال پیش برای این که وقتم سر وین ریختن و نصب برنامه ها تلف نشه از فولدرهای ویندوز و پروگرم فایلز و ... یه کپی گرفتم و بعد همه رو rar کردم. با اون همه برنامه که نصب بود حجم فایل rar به چند گیگ رسید. بعد هر دفعه فایل رو اکسترکت میکردم و با استفاده از safe mode و روش های دیگه که درست یادم نیست تو 5 دقیقه وین رو نصب میکردم. ولی بعدا روش ایمیج گرفتن اومد که کار رو ساده تر کرد.

شما حجم رو بر اساس بایت که نمیخوای مسلما. حجم رو 3 بار تقسیم بر 1024 کن تا به گیگ تبدیل شه. بعد بریز تو متغیر.
فایل رو بصورت binary باز کن
یه متغیر از نوع String تعریف کن
توش یه مقدار مشخص space بنداز. مثلا 1000 تا
بعد از اون فایل داده ها رو بگیر بریز تو این متغیر.
چند بار این رو تو حلقه تکرار کن تا کل داده ها رو بگیری. اینطوری میفهمی چند بایته . . .
برای دقت بیشتر می تونی از trim هم استفاده کنی تا تو آخریش space اضافه نیاد.
ممنون از پاسخ هاتون

آقاي Di Di : شما وقتكي كه از يك DVD ، تصوير(Image) مي گيريد حجم فايل چقدر مي شه؟
payman62: برنامه قادر به گرفتن حجم فايل نيست و اصلا كار به جايي نمي كشه كه ما بخوايم تقسيم بر 1000*1000 كنيم! مي تونيد امتحان كنيد.
spiderman: من مي خوام با FSO حجم رو بگيرم.
سلام.
حتما باید fso باشه؟
filelen چطور؟
Function FileLen(PathName As String) As Long
مقدار برگشتیش Long هست. اگه بیشتر 2 میلیارد و خورده ای بشه ارور میده. تا حدود 2 گیگ جا داره.

میتونی نیمه اول فایل رو بخونی حجمشو بگیری بعد نیمه دومش رو بخونی حجم اونم بگیری. هر کدوم رو به گیگ تبدیل کنی و جمع کنی.
شما راهي با FSO نمي دونيد؟
در ضمن منظورتون از نيمه اول و دوم فايل چيه؟ با filelen() مگه مي شه حجم فايل رو در چند مرحله گرفت؟ يا منظور شما با استفاده از Get بود؟
VB.NET. اندازه long اونجا 46 بیته.
سلام
خوب هستيد
با fso نميشه اندازه فايل هاي بزرگ رو گرفت . با File len هم تا 4294967295 رو مي توني بدست بياوري .
نكته چون ما اعداد منفي توي اندازه فايل نداريم عدد long بدون علامت توسط filelen بر گردانده ميشود . اما اعدد بدست امده هنگام نمايش علامت دار نمايش داده ميشن پس براي فايل هاي با حجم بين 2,147,483,647 و 4,294,967,295 سايز فايل منفي نشون داده مي شه .

اما ميشه از كد زير براي همه نوع فايل استفاده كرد براي اين كار يك پروژه استاندارد باز كنيد و كد زير رو توش كپي پيست كنيد
کد:
Private Const OPEN_EXISTING = 3
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type BY_HANDLE_FILE_INFORMATION
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    dwVolumeSerialNumber As Long
    nFileSizeHigh As Long
    nFileSizeLow As Long
    nNumberOfLinks As Long
    nFileIndexHigh As Long
    nFileIndexLow As Long
End Type
Private Declare Function GetFileInformationByHandle Lib "kernel32" (ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
MsgBox GetFileSize("xxxx")
End Sub

Function GetFileSize(strPath As String) As Double
    Dim hFile As Long, FileInfo As BY_HANDLE_FILE_INFORMATION
    GetFileSize = -1
    ' Check if file exist
    If Dir(strPath) = "" Then Exit Function
    ' Create handle for strpath file
    hFile = CreateFile(strPath, 0, 0, ByVal 0&, OPEN_EXISTING, 0, ByVal 0&)
    'retrieve the file information
    GetFileInformationByHandle hFile, FileInfo
    'close the handle
    CloseHandle hFile
    'convert the result fo no sign long & add high order size and Low order size
    GetFileSize = ValNoSin(FileInfo.nFileSizeHigh) * ValNoSin(&HFFFFFFFF) + ValNoSin(FileInfo.nFileSizeLow)
End Function

Function ValNoSin(el As Long) As Double
    Dim elhex As String
    Dim dblDum As Double
    Dim bytAsc As Byte
    dblDum = 0
    ' convert it to hex
    elhex = UCase(Hex(el))
    ' now with out craying sign bit convert it to decimal base
    For i = 1 To Len(elhex)
        bytAsc = Asc(Mid(elhex, i, 1)) - 48
        If bytAsc > 10 Then _
            bytAsc = bytAsc - 7
        dblDum = dblDum * 16 + bytAsc
    Next
    ValNoSin = dblDum
End Function
بحاي فايل فرستاده شده كه xxxx است مسير فايل خودتون رو بگذاريد

به اميد ديدار
ممنون از راهنمايي دوستان