获取文件大小(字节).http://topic.csdn.net/u/20090409/09/129ffe56-8d9c-46fe-aa1f-7b9cdcfa2425.html

解决方案 »

  1.   

    大概是通过 FindFirstFile这个api获取 WIN32_FIND_DATA结构,从而得到int64的长度值.这个值在WIN32_FIND_DATA中用两个int32的变量来保存的。
      

  2.   

    我不会pb,但是用c#测试了一下,没有问题。就一个api和一个structrue的定义,pb中实现的难度应该不大using System;
    using System.Runtime.InteropServices;
    namespace ConsoleApplication16
    {
        class Program
        {
            [Serializable, StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto), BestFitMapping(false)]
            internal class WIN32_FIND_DATA
            {
                internal int dwFileAttributes;
                internal int ftCreationTime_dwLowDateTime;
                internal int ftCreationTime_dwHighDateTime;
                internal int ftLastAccessTime_dwLowDateTime;
                internal int ftLastAccessTime_dwHighDateTime;
                internal int ftLastWriteTime_dwLowDateTime;
                internal int ftLastWriteTime_dwHighDateTime;
                internal int nFileSizeHigh;
                internal int nFileSizeLow;
                internal int dwReserved0;
                internal int dwReserved1;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
                internal string cFileName;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
                internal string cAlternateFileName;
            }
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern int FindFirstFile(string fileName, [In, Out] WIN32_FIND_DATA data);        static void Main(string[] args)
            {
                WIN32_FIND_DATA win_find_data = new WIN32_FIND_DATA();
                FindFirstFile(@"\\10.1.3.252\sqlbak\dbMediaImport.bak", win_find_data);            long size = (long)win_find_data.nFileSizeHigh * 4294967296 + win_find_data.nFileSizeLow;            double sizeG = size * 1.0 / 1024 / 1024 / 1024;
                //这里得到dbMediaImport.bak的文件大小是5,600,615,936字节,大约5.21G
            }
        }
    }
      

  3.   

    to  jinjazz WIN32_FIND_DATA是多少个参数,你怎么有十几个?我这里只发现十个.
      

  4.   

    OK,搞定,方法为在PB中自己定义结构体,然后使用FindFirstFile.不过要注意结构体的内容,和网上公布的内容有些不一样.
      

  5.   

    我是反射.Net FrameWork里面的代码出来的。你测试一下你的能不能直接用