我想尝试一些win32函数来管理文件。 特别是,我想创建一个程序,将文件作为输入,并将其打印为反向。
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
void prova()
{
int z = 0;
while(z<5)
{
puts("Helloworld!");
z++;
}
}
int m = 0;
int main(int argc, char **argv)
{
LPDWORD lpFileSizeHigh;
HANDLE file;
file = CreateFile(
argv[1],
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(file == INVALID_HANDLE_VALUE)
{
printf("Error on opening the file: %x", GetLastError());
return 1;
}
DWORD fileSize = GetFileSize(file, lpFileSizeHigh);
CloseHandle(file);
printf("fileSize: %d\n", fileSize );
prova();
while(m<5)
{
puts("Hello, world!");
m++;
}
return 0;
}
为了清楚和简洁起见,我重新安装了代码并删除了未到达的倒车部件。
这段代码非常适用,打印出10次Hello,World。但是,如果在main函数中定义m变量,它会因某种原因停止响应。 如果我删除文件相关代码,它会再次开始工作O_o 我是c语言的菜鸟,因为我没有多少经验,但我不明白为什么会这样做。
我在Windows 8上使用Eclipse和mingw。
答案 0 :(得分:1)
LPDWORD lpFileSizeHigh;
这会分配一个指针,但不会对其进行初始化。
DWORD fileSize = GetFileSize(file, lpFileSizeHigh);
这会将未初始化的指针传递给GetFileSize
,此时可能会发生任何事情。
声明变量:
DWORD FileSizeHigh;
并传递其地址:
DWORD fileSize = GetFileSize(file, &FileSizeHigh);
FWIW,GetFileSizeEx
更容易使用。