设置文件的size

// 设置文件的size.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "windows.h"
#include <iostream>
using namespace std;

int main()
{
    LONG liNewPointer = 0;
    DWORD dwRet = 0;
   
    DWORD dwStPg = SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE);
    if (dwStPg != ERROR_SUCCESS)
    {
        cout << "SetPrivilege GetLastError : " << GetLastError() << endl;
        return 4;
    }

    HANDLE hFile = CreateFile("C://111.txt",
        GENERIC_WRITE,
        NULL,
        NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        dwRet = GetLastError();
        cout << "1 : " << dwRet << endl;
        return 1;
    }

    if (!SetFilePointer(hFile, 1024 * 1024, &liNewPointer, FILE_BEGIN))
    {
        dwRet = GetLastError();
        cout << "2 : " << dwRet << endl;
        return 2;
    }
    if (!SetEndOfFile(hFile))
    {
        dwRet = GetLastError();
        cout << "3 : " << dwRet << endl;
        return 3;
    }
    if (!SetFileValidData(hFile, 1024 * 1024))
    {
        cout << "SetFileValidData failed! lasterror=" << GetLastError() << endl;
    }

    CloseHandle(hFile);

    return 0;
}

创建文件的时候加上
FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING那么writefile会报参数,
而异步写是需这样的flag的,可能解决办法:先closehandle,再打开文件writefile

int main()
{
    DWORD dwStPg = SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE);
    if (dwStPg != ERROR_SUCCESS)
    {
        cout << "SetPrivilege GetLastError : " << GetLastError() << endl;
        return 4;
    }

    HANDLE hfile1 = CreateFile("C://filesz.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
                                CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL/* | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING*/, NULL);
    if (INVALID_HANDLE_VALUE == hfile1)
    {
        cout << "createfile" << endl;
        return 1;
    }

    DWORD dwRetn = SetFilePointer(hfile1, 1024l * 1024l * 2l, NULL, FILE_BEGIN);
    if (INVALID_SET_FILE_POINTER == dwRetn)
    {
        cout << "SetFilePointer GetLastError : " << GetLastError() << endl;
        CloseHandle(hfile1);
        return 2;
    }

    BOOL bIsSed = SetEndOfFile(hfile1);
    if (!bIsSed)
    {
        cout << "SetEndOfFile GetlastError : " << GetLastError() << endl;
        CloseHandle(hfile1);
        return 3;
    }

    SetFilePointer(hfile1, 0, NULL, FILE_BEGIN);
    DWORD dwWted = 0;
    char szbuff[7] = "okokok";
    if (!WriteFile(hfile1, szbuff, 6, &dwWted, NULL))
    {
        cout << "writefile GetlastError : " << GetLastError() << endl;
        return 6;
    }

    BOOL bIsSet = SetFileValidData(hfile1,6);
    if(!bIsSet)
    {
        cout << "SetFileValidData GetlastError : " << GetLastError() << endl;
        CloseHandle(hfile1);
        return 5;
    }

    bIsSed = SetEndOfFile(hfile1);
    if (!bIsSed)
    {
        cout << "SetEndOfFile GetlastError : " << GetLastError() << endl;
        CloseHandle(hfile1);
        return 3;
    }

    CloseHandle(hfile1);
   
    return 0;
}

DWORD SetPrivilege(
                   LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
                   BOOL bEnablePrivilege   // to enable or disable privilege
                  )
{
    HANDLE hToken = NULL;
    TOKEN_PRIVILEGES tp;
    LUID luid;
    BOOL bRet;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ | TOKEN_WRITE, &hToken))
    {
        //        cerr << "OpenProcessToken failed! LastError=" << GetLastError() << endl;
        return GetLastError();
    }

    if ( !LookupPrivilegeValue(
        NULL,            // lookup privilege on local system
        lpszPrivilege,   // privilege to lookup
        &luid ) )
    {
        CloseHandle(hToken);
        return GetLastError();
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;

    // Enable the privilege or disable all privileges.

    bRet = AdjustTokenPrivileges(
        hToken,
        FALSE,
        &tp,
        sizeof(TOKEN_PRIVILEGES),
        (PTOKEN_PRIVILEGES) NULL,
        (PDWORD) NULL);

    // Call GetLastError to determine whether the function succeeded.

    if (!bRet)
    {
        ::CloseHandle(hToken);
        return GetLastError();
    }
    ::CloseHandle(hToken);

    return ERROR_SUCCESS;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值