关于读稀疏文件的问题

背景:在windows系统,如果磁盘格式为NTFS,就可以创建一个非常大的稀疏文件,这个文件的大小可以大于该分区的剩余大小,然后向文件写数据时才会分配磁盘空间,可以节省磁盘空间。
问题:        HANDLE hFile = CreateFile(_this->m_strSrcFile,
                GENERIC_READ,
                FILE_SHARE_READ|FILE_SHARE_WRITE,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_ARCHIVE,        //
                0);
        if ( INVALID_HANDLE_VALUE  == hFile)
        {
                LOGFILE("1 CreateFile failure,Error=%d",GetLastError());
                return 0;
        }
       
        ULARGE_INTEGER uli;
        uli.LowPart = GetFileSize(hFile,&uli.HighPart);
        DWORD dwSize = 1<<15;
        DWORD dwCount = (DWORD)((uli.QuadPart/dwSize)+(uli.QuadPart%dwSize?1:0));
        PBYTE pBuf = new BYTE[dwSize];
        for (DWORD i=0; i<dwCount; i++)
        {
                DWORD dwReal=0;
                BOOL bRead = ReadFile(hFile,pBuf,dwSize,&dwReal,NULL);
                if (!bRead)
                {
                        LOGFILE("1 ReadFile failure,Error=%d",GetLastError());
                        return 0;       
                }
                DWORD dwPos = (i+1)*100/dwCount;
                _this->m_ProgressCtrl.SetPos(dwPos);
        }

        delete []pBuf;
        CloseHandle(hFile);

当我像读普通一样读稀疏文件的时候发现,我的磁盘空间减少,当磁盘空间减少到0时,ReadFile就会返回错误112,后来查了一下啊,是磁盘空间不足的错误,这是什么原因?有人知道吗?

XXXXXXXXXXXXXXXXXXXXX
有人遇到这种问题吗,server 2003 和xp系统下很容易出现这种情况,帮我看看,或者身边有高手的帮我请教一下,不胜感激!可以物质上感谢。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值