Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;检查文件是否为空 我有一个C++项目,我需要编辑。这是变量的声明: // Attachment OFSTRUCT ofstruct; HFILE hFile = OpenFile( mmsHandle->hTemporalFileName , &ofstruct , OF_READ ); DWORD hFileSize = GetFileSize( (HANDLE) hFile , NULL ); LPSTR hFileBuffer = (LPSTR)GlobalAlloc(GPTR, sizeof(CHAR) * hFileSize ); DWORD hFileSizeReaded = 0; ReadFile( (HANDLE) hFile , hFileBuffer, hFileSize, &hFileSizeReaded, NULL ); CloseHandle( (HANDLE) hFile );_C++_File_Winapi - Fatal编程技术网

c++;检查文件是否为空 我有一个C++项目,我需要编辑。这是变量的声明: // Attachment OFSTRUCT ofstruct; HFILE hFile = OpenFile( mmsHandle->hTemporalFileName , &ofstruct , OF_READ ); DWORD hFileSize = GetFileSize( (HANDLE) hFile , NULL ); LPSTR hFileBuffer = (LPSTR)GlobalAlloc(GPTR, sizeof(CHAR) * hFileSize ); DWORD hFileSizeReaded = 0; ReadFile( (HANDLE) hFile , hFileBuffer, hFileSize, &hFileSizeReaded, NULL ); CloseHandle( (HANDLE) hFile );

c++;检查文件是否为空 我有一个C++项目,我需要编辑。这是变量的声明: // Attachment OFSTRUCT ofstruct; HFILE hFile = OpenFile( mmsHandle->hTemporalFileName , &ofstruct , OF_READ ); DWORD hFileSize = GetFileSize( (HANDLE) hFile , NULL ); LPSTR hFileBuffer = (LPSTR)GlobalAlloc(GPTR, sizeof(CHAR) * hFileSize ); DWORD hFileSizeReaded = 0; ReadFile( (HANDLE) hFile , hFileBuffer, hFileSize, &hFileSizeReaded, NULL ); CloseHandle( (HANDLE) hFile );,c++,file,winapi,C++,File,Winapi,我需要检查文件是否附加(我想我需要检查hFile是否有任何值),但不知道如何附加。我尝试了hFile==NULL,但这不起作用 谢谢, Ile将hFile与hFile_错误进行比较(不与NULL进行比较!)。另外,您应该将OpenFile更改为CreateFile,并正确地调用它,因为OpenFile早就被弃用了。事实上,MSDN明确指出: OpenFile函数 仅在16位的情况下使用此功能 Windows版本。更新的 应用程序,使用CreateFile 功能 进行此更改时,将返回一个句柄,应将

我需要检查文件是否附加(我想我需要检查hFile是否有任何值),但不知道如何附加。我尝试了
hFile==NULL
,但这不起作用

谢谢,

Ile

将hFile与hFile_错误进行比较(不与NULL进行比较!)。另外,您应该将OpenFile更改为CreateFile,并正确地调用它,因为OpenFile早就被弃用了。事实上,MSDN明确指出:

OpenFile函数

仅在16位的情况下使用此功能 Windows版本。更新的 应用程序,使用CreateFile 功能

进行此更改时,将返回一个句柄,应将其与无效的\u句柄\u值进行比较

更新:获取文件大小的正确方法:

LARGE_INTEGER fileSize={0};

// You may want to use a security descriptor, tweak file sharing, etc...
// But this is a boiler plate file open
HANDLE hFile=CreateFile(mmsHandle->hTemporalFileName,GENERIC_READ,0,NULL,
                        OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile!=INVALID_HANDLE_VALUE && GetFileSizeEx(hFile,&fileSize) && 
    fileSize.QuadPart!=0)
{
  // The file has size
}
else
{
  // The file is missing or size==0 (or an error occurred getting its size)
}

// Do whatever else and don't forget to close the file handle when done!
if (hFile!=INVALID_HANDLE_VALUE)
  CloseHandle(hFile);

将hFile与hFile_错误进行比较(不与NULL进行比较!)。另外,您应该将OpenFile更改为CreateFile,并正确地调用它,因为OpenFile早就被弃用了。事实上,MSDN明确指出:

OpenFile函数

仅在16位的情况下使用此功能 Windows版本。更新的 应用程序,使用CreateFile 功能

进行此更改时,将返回一个句柄,应将其与无效的\u句柄\u值进行比较

更新:获取文件大小的正确方法:

LARGE_INTEGER fileSize={0};

// You may want to use a security descriptor, tweak file sharing, etc...
// But this is a boiler plate file open
HANDLE hFile=CreateFile(mmsHandle->hTemporalFileName,GENERIC_READ,0,NULL,
                        OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile!=INVALID_HANDLE_VALUE && GetFileSizeEx(hFile,&fileSize) && 
    fileSize.QuadPart!=0)
{
  // The file has size
}
else
{
  // The file is missing or size==0 (or an error occurred getting its size)
}

// Do whatever else and don't forget to close the file handle when done!
if (hFile!=INVALID_HANDLE_VALUE)
  CloseHandle(hFile);

在打开文件之前,可以尝试以下操作:

WIN32_FIND_DATA wfd;
HANDLE h = FindFirstFile(filename, &wfd);
if (h != INVALID_FILE_HANDLE)
{
    // file exists
    if (wfd.nFileSizeHigh != 0 || wfd.nFileSizeLow != 0)
    {
        // file is not empty
    }
    FindClose(h)
}

在打开文件之前,可以尝试以下操作:

WIN32_FIND_DATA wfd;
HANDLE h = FindFirstFile(filename, &wfd);
if (h != INVALID_FILE_HANDLE)
{
    // file exists
    if (wfd.nFileSizeHigh != 0 || wfd.nFileSizeLow != 0)
    {
        // file is not empty
    }
    FindClose(h)
}

是否有使用HFILE_错误的示例?嗯,看起来我从来没有出错过。。。可能是因为程序自动创建了一个空文件。您是否知道如何检查“DWORD hFileSize”值并将其与其他值进行比较?您是否正在尝试测试该文件是否存在或获取其长度?我不能完全理解你的目标。问题是程序自动创建新文件(至少我认为是这样-应用程序相当大,据我所知,它是这样工作的),然后用户应该对该文件执行一些操作,这就是我需要进行验证的地方。我需要检查文件是空的还是有一些内容。有没有使用HFILE_错误的例子?嗯,看起来我从来没有出错过。。。可能是因为程序自动创建了一个空文件。您是否知道如何检查“DWORD hFileSize”值并将其与其他值进行比较?您是否正在尝试测试该文件是否存在或获取其长度?我不能完全理解你的目标。问题是程序自动创建新文件(至少我认为是这样-应用程序相当大,据我所知,它是这样工作的),然后用户应该对该文件执行一些操作,这就是我需要进行验证的地方。我需要检查文件是否为空或是否有某些内容。这可能不起作用,因为通常情况下,当文件写入元数据时,其元数据(包括文件长度)没有更新。这就是为什么当您在目录中查找时,会看到大小为零的工作文件。您必须“触摸”文件(例如,通过读取文件)以更新其文件长度。来自MSDN:注意:在极少数情况下,在调用此函数(FindFirstFile)时,NTFS文件系统上的文件信息可能不是最新的。要确保获得当前文件信息,请调用GetFileInformationByHandle函数。@@迈克尔,谢谢你的警告。如果我理解正确的话,有可能一个文件在不存在时显示为空,而不是相反?它可能显示为空或字节数比实际存在的字节数少。这可能不起作用,因为通常情况下,当文件写入元数据时,其元数据(包括文件长度)没有更新。这就是为什么当您在目录中查找时,会看到大小为零的工作文件。您必须“触摸”文件(例如,通过读取文件)以更新其文件长度。来自MSDN:注意:在极少数情况下,在调用此函数(FindFirstFile)时,NTFS文件系统上的文件信息可能不是最新的。要确保获得当前文件信息,请调用GetFileInformationByHandle函数。@@迈克尔,谢谢你的警告。如果我理解正确的话,一个文件可能会在不存在时显示为空,而不是相反?它可能会显示为空或比实际存在的字节更少。