VC下文件的使用

在VC下文件的使用的案例

文件常用的有新建,读,写文件,删除文件,读取文件的路径,创建文件夹(目录),文件的复制,移动,重命名,读取文件的大小,

查找文件,遍历目录下的文件和子目录,递归遍历目录下的所有文件和子目录

比较少用到的的功能设置文件的属性,使用内存映射文件等

下面是几个关于文件使用几个函数 :

#include <Windows.h>
#include <stdio.h>

//创建文件
HANDLE CreateFile( __in LPCSTR lpFileName,
	__in DWORD dwDesiredAccess,
	__in DWORD dwShareMode,
	__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
	__in DWORD dwCreationDisposition,
	__in DWORD dwFlagsAndAttributes,
	__in_opt HANDLE hTemplateFile );
//参数
//lpFileName			  //操作对象文件的相对或者绝对路径
//dwDesiredAccess		  //指明对象文件的操作存取方式 GENERIC_READ, GENERIC_WRITE, GENERIC_READGENERIC_WRITE
//dwShareMode			  //指明与其他进程是否共享该文件,可以读,写,删除共享等FILE_SHARE_WRITE, 如果进程独占改文件,设置为0
//lpSecurityAttributes	  //表示文件句柄的安全属性,一般设置为NULL,有特殊要求特别设置
//dwCreationDisposition	  //文件操作模式 CREATE_ALWAYS, CREATE_NEW, OPEN_ALWAYS, OPEN_EXISTING, TRUNCATE_EXISTING
//dwFlagsAndAttributes	  //文件属性和标志, 一般设置为FILE_ATTRIBUTE_NORMAL
//hTemplateFile			  //当存取权限包括GENERIC_WRITE, 可以设置一个模板文件的句柄.一般设置为NULL

HANDLE hFile = CreateFile(".\\setting.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

//从文件中读取数据
BOOL ReadFile(__in        HANDLE hFile,
	__out_bcount_part_opt(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID lpBuffer,
	__in        DWORD nNumberOfBytesToRead,
	__out_opt   LPDWORD lpNumberOfBytesRead,
	__inout_opt LPOVERLAPPED lpOverlapped);
//参数
//hFile				文件句柄,文件操作方式应该是GENERIC_READ
//lpBuffer			读取文件数据存储数据的内存缓冲区
//nNumberOfBytesToRead 指明需要需要从文件中读出的数据的大小,不能大于lpBuffer的大小,否则会溢出
//lpNumberOfBytesRead输出参数,指向存储实际独处的数据大小DWORD变量
//lpOverlapped:输出参数,如果抵用CreateFile函数设置了FILE_FLAG_OVERLAPPED标志,则需要使用该参数,否则可以为NULL

//从文件中写入数据
BOOL WriteFile( __in HANDLE hFile,
	__in_bcount_opt(nNumberOfBytesToWrite) LPCVOID lpBuffer,
	__in DWORD nNumberOfBytesToWrite,
	__out_opt LPDWORD lpNumberOfBytesWritten,
	__inout_opt LPOVERLAPPED lpOverlapped );
//参数
//hFile					  文件句柄
//lpBuffer				  需要写入文件的缓冲区
//nNumberOfBytesToWrite	  指明需要写入文件中的数据的大小
//lpNumberOfBytesWritten  指向真是写入的数据大小的变量
//lpOverlapped:输出参数,如果抵用CreateFile函数设置了FILE_FLAG_OVERLAPPED标志,则需要使用该参数,否则可以为NULL

//获取文件的大小
DWORD GetFileSize(HANDLE hFile, LPDWORD lpFilesizeHigh);
//参数
//HANDLE hFile 文件句柄
//LPDWORD lpFilesizeHigh 输出函数, 表示得到的文件大小的高32位,该参数可以设置为NULL
//还有一个获取文件大小的函数 BOOL GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize);

//删除文件
BOOL DeleteFile( LPCTSTR lpFileName );
//参数  LPCTSTR lpFileName 表示要删除文件的相对路径或绝对路径
//返回值BOOL 表示文件删除是否成功,如果程序返回失败,可以用GetLastError()获取错误信息

//复制文件
BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);
//参数
//lpExistingFileName : 已经存在的所需复制文件的原路径
//lpNewFilename : 新文件路径,复制文件的目的路径
//bFailIfExists : 指明如果在目的路径存在文件时是否覆盖,如果设置为TRUE,则不覆盖,如果存在,则返回失败(0x50)

//移动文件(该函数的功能 : 移动,重命名和目录)
BOOL MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName);
//参数
//lpExistingFileName : 已经存在的所需移动文件的原路径
//lpNewFilename : 新文件路径,移动文件的目的路径

//CopyFileEx, MoveFileEx, MoveFileWithProcessSS函数功能更加丰富

//创建一个目录或者文件夹
BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes );
//lpPathName : 所需要创建的目录或者路径
//lpSecurityAttributes : 输入参数,设置为NULL
//返回值 如果失败,可以使用GetLastError函数获取错误信息,
//可能的值包括ERROR_ALREADY_EXISTS(文件已经存在), ERROR_PATH_NOT_FOUND

//获取进程的当前目录
DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer );
//参数
//nBufferLength : 输入参数,存储路径字符串缓冲区的大小,一般调用MAX_PATH
//lpBuffer: 输出参数,只想获取的路径字符串
//返回值 : 如果为0,表示失败。 如果非0,表示获取的字符串的长度

//设置进程的当前目录
BOOL SetCurrentDirectory(LPCTSTR lpPathName);
//参数
//lpPathName : 输入参数,所要设置的路径

//获取模块文件名
DWORD GetModuleFileName( __in_opt HMODULE hModule,
	                     __out_ecount_part(nSize, return + 1) LPSTR lpFilename,
						 __in DWORD nSize );

//hModule : 所需要模块路径的模块句柄,设置为NULL表示当前模块路径
//lpFilename: 模块的全路径
//nSize : 指向缓冲区的大小

//返回值 : 如果为0,表示失败。 如果非0,表示获取的字符串的长度

//对文件进行查找,遍历指定目录下的文件和子目录
//WINDOW api中,有一组专门的函数和数据结构,用于遍历目录,
//他们是FindFirstFile, FindNextFile, WIN32_FIND_DATA
BOOL FindNextFile( __in HANDLE hFindFile,
				   __out LPWIN32_FIND_DATAA lpFindFileData );
//hFindFile  查找的目录,需使用通配符指定查找的文件目标
//lpFindFileData 指向WIN32_FIND_DATA结构的指针,为找到的文件及若干属性信息

HANDLE FindFirstFile( __in LPCSTR lpFileName,
	                  __out LPWIN32_FIND_DATAA lpFindFileData );
//lpFileName 查找句柄
//lpFindFileData 指向WIN32_FIND_DATA结构的指针,为找到的文件及若干属性信息

//关键的结构体

typedef struct _WIN32_FIND_DATAA {
	DWORD dwFileAttributes;
	FILETIME ftCreationTime;
	FILETIME ftLastAccessTime;
	FILETIME ftLastWriteTime;
	DWORD nFileSizeHigh;
	DWORD nFileSizeLow;
	DWORD dwReserved0;
	DWORD dwReserved1;
	CHAR   cFileName[ MAX_PATH ];
	CHAR   cAlternateFileName[ 14 ];
#ifdef _MAC
	DWORD dwFileType;
	DWORD dwCreatorType;
	WORD  wFinderFlags;
#endif
} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;

//实现对指定目录中文件和子目录的遍历,并将遍历得到的文件和其他属性打印到界面上
DWORD EnumerateFileInDirectory(LPSTR szPath)
{
	WIN32_FIND_DATA FindFileData;
	HANDLE hListFile;
	CHAR szFilePath[MAX_PATH];

	//构造代表子目录和文件夹路径的字符串,使用通配符"*"
	lstrcpy(szFilePath, szPath);
	//注释的代码可以用于查找所有的以".txt"结尾的文件
	//lstrcat(szFilePath, "\\*.txt");
	lstrcat(szFilePath, "\\*");
	//查找第一个文件/目录, 获取查找句柄
	hListFile = FindFirstFile(szFilePath, &FindFileData);
	if (hListFile == INVALID_HANDLE_VALUE)
	{
		return 1;
	}
	else
	{
		do
		{
			/*如果不想显示代表本级目录和上一级目录的"."和".."
			可以使用注释部分的代码过滤
			if (lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0)
			{
				continue;
			}
			*/
			//打印文件名,目录名
			printf("%s\t\t", FindFileData.cFileName);

			//判断文件属性,是否为加密文件或文件夹
			if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED)
			{
				printf("加密\n");
			}
			//判断文件属性是否为隐藏文件或文件夹
			if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
			{
				printf("隐藏\n");
			}
			//判断文件属性是否为目录
			if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				printf("DIR");
				//如果是目录,可以继续查找下去
				CHAR szNewFilePath[MAX_PATH] = {9};
				wsprintf(szNewFilePath, "%s\\%s", szPath, FindFileData.cFileName);
				EnumerateFileInDirectory(szNewFilePath);
			}
		} while (FindNextFile(hListFile, &FindFileData));
	}
	return 0;
}

/*************************************************************
SaveDataToFile
功能 : 读取文件内容
参数 : LPSTR szFilePath       文件路径
**************************************************************/
DWORD ReadFileContent(LPSTR szFilePath)
{
	//文件句柄
	HANDLE hFileRead = NULL;
	//保持文件大小
	LARGE_INTEGER liFileSize;
	//成功读取文件数据大小
	DWORD dwReadedSize;
	//累加计算已经读取数据大小
	LONGLONG liTotalRead = 0;
	//文件数据缓存
	BYTE lpFileDataBuffer[32] = {0};

	//打开已有文件,读取内容
	hFileRead = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	//打开文件是否成功
	if (hFileRead == INVALID_HANDLE_VALUE)
	{
		printf("打开文件失败 : %d\n", GetLastError());
		return 0;
	}
	if (!GetFileSizeEx(hFileRead, &liFileSize))
	{
		printf("获取文件大小失败 : %d\n", GetLastError());
		return 0;
	}
	else
	{
		printf("文件大小为 : %d\n", liFileSize.QuadPart);
	}

	//循环读取文件并打印文件内容
	while (1)
	{
		DWORD i;
		if (!ReadFile(hFileRead, lpFileDataBuffer, 32, &dwReadedSize, NULL))
		{
			printf("读取文件错误 : %d\n", GetLastError());
		}
		printf("读取了%d 个字节, 文件内容是 : ", dwReadedSize);
		for (i = 0; i < dwReadedSize; i++)
		{
			printf("0x%x", lpFileDataBuffer[i]);
		}
		printf("\n");
		liTotalRead += dwReadedSize;
		if (liTotalRead == liFileSize.QuadPart)
		{
			printf("文件读取结束!\n");
			break;
		}
	}
	CloseHandle(hFileRead);
	return 1;
}

/*************************************************************
SaveDataToFile
功能 : 将数据存储到文件末尾
参数 : LPSTR szFilePath       文件路径
	   LPVOID lpData          需存储的数据
	   DWORD dwDataSize       数据大小(字节)
**************************************************************/
DWORD SavaDataToFile(LPSTR szFilePath, LPVOID lpData, DWORD dwDataSize)
{
	//文件句柄
	HANDLE hFileWrite = NULL;
	//成功写入的数据大小
	DWORD dwWriteDataSize = 0;
	//打开已经存在的文件,读取内容
	hFileWrite = CreateFile(szFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFileWrite == INVALID_HANDLE_VALUE)
	{
		printf("打开文件失败 : %d\n", GetLastError());
		return 0;
	}
	//设置文件指针到文件尾
	SetFilePointer(hFileWrite, 0, 0, FILE_END);
	//将数据写入文件
	if (!WriteFile(hFileWrite, lpData, dwDataSize, &dwWriteDataSize, NULL))
	{
		printf("写入文件失败 : %d\n", GetLastError());
		return 0;
	}
	else
	{
		printf("写入文件成功, 写入 %d 个字节!\n", dwWriteDataSize);
	}
	CloseHandle(hFileWrite);
	return 1;
}

//ini文件的测试代码
void TestINIFile()
{
	//在当前程序目录下创建一个user_setting.ini文件
	HANDLE hFile = NULL;
	hFile = CreateFile(".\\user_setting.ini", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	if (NULL == hFile)
	{
		printf("文件创建失败!\n");
		return;
	}
	CloseHandle(hFile);

	//在user_setting.ini文件中创建一个section,并写入数据
	BOOL bRet = FALSE;
	bRet = WritePrivateProfileString("Column_Section", "Column_Width", "500", ".\\user_setting.ini");
	bRet = WritePrivateProfileString("Column_Section", "Column_Height", "500", ".\\user_setting.ini");
	bRet = WritePrivateProfileString("Column_Section", "Column_Angle", "0.0", ".\\user_setting.ini");
	bRet = WritePrivateProfileString("Column_Attribute", "Column_Id", "1", ".\\user_setting.ini");
	bRet = WritePrivateProfileString("Column_Attribute", "Column_Color", "Red", ".\\user_setting.ini");
	bRet = WritePrivateProfileString("Column_Attribute", "Column_Point", "Original", ".\\user_setting.ini");
	//从user_setting.ini文件中读取某个section的一个key的字符串
	CHAR Column_Width[100] = {0};
	DWORD dwRes = 0;
	dwRes = GetPrivateProfileString("Column_Section", "Column_Width", "300", Column_Width, 100, ".\\user_setting.ini");
	CHAR Column_Height[100] = {0};
	dwRes = GetPrivateProfileString("Column_Section", "Column_Width", "300", Column_Height, 100, ".\\user_setting.ini");
	CHAR Column_Angle[100] = {0};
	dwRes = GetPrivateProfileString("Column_Section", "Column_Width", "300", Column_Angle, 100, ".\\user_setting.ini");

	//从ini文件中读取整个section的内容
	CHAR Column_Attribute[300] = {0};
	dwRes = GetPrivateProfileSection("Column_Attribute", Column_Attribute, 300, ".\\user_setting.ini");
	printf("%s\n", Column_Attribute);
	//从ini文件中读取section的名称, 如果 ini 中有两个 Section: [sec1] 和 [sec2],则返回的是 'sec1',0,'sec2',0,0
	CHAR Section_Name[100] = {0};
	dwRes = GetPrivateProfileSectionNames(Section_Name, 100, ".\\user_setting.ini");
	printf("%s\n", Section_Name);

	//将一个整个section的内容加入到另外指定的section中, Column_Attribute中的内容覆盖了原来Column_Section中的内容
	bRet = WritePrivateProfileSection("Column_Section", Column_Attribute, ".\\user_setting.ini");
}

//获取当前目录,获取程序所在的目录,获取模块路径
void TestOnDirectory()
{
	//用于储存当前路径
	CHAR szCurrentDirectory[MAX_PATH] = {0};
	//用于储存模块路径
	CHAR szMoudlePath[MAX_PATH] = {0};
	//Kernel32文件名与句柄
	LPSTR szKernel32 = "kernel32.dll";
	HMODULE hKernel32;
	//当前路径的长度,也用于判断获取是否成功
	DWORD dwCurDirPathLen;
	//获取进程的当前目录
	dwCurDirPathLen = GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
	if (dwCurDirPathLen == 0)
	{
		return;
	}
	printf("%s\n", szCurrentDirectory);

	//将进程当前的目录设置为 "C:\"
	lstrcpy(szCurrentDirectory, "C:\\");
	if (!SetCurrentDirectory(szCurrentDirectory))
	{
		return;
	}

	//在当前目录下创建子目录“current_dir"
	CreateDirectory("current_dir", NULL);

	//再次获取系统当前目录
	dwCurDirPathLen = GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
	if (dwCurDirPathLen == 0)
	{
		return;
	}
	printf("GetCurrentDirectory获取的当前目录为 %s\n", szCurrentDirectory);

	//使用NULL参数,获取本模块的路径
	if (!GetModuleFileName(NULL, szMoudlePath, MAX_PATH))
	{
		return;
	}
	printf("本模块路径 %s", szMoudlePath);

	//获取Kernel32.dll的模块句柄
	hKernel32 = LoadLibrary(szKernel32);

	//获取kernel32.dll的模块句柄
	if (!GetModuleFileName(hKernel32, szMoudlePath, MAX_PATH))
	{
		return;
	}
	printf("kernel32.dll模块路径 %s", szMoudlePath);

	return;
}

//对文件的属性进行显示的一些函数

DWORD ShowFileTime(PFILETIME lptime);
DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow);
DWORD ShowFileAttrInfo(DWORD dwAttribute);
DWORD ShowFileAttribute(LPSTR szPath)
{
	WIN32_FILE_ATTRIBUTE_DATA wfad;
	printf("文件 : %s\n", szPath);
	//获取文件属性
	if (!GetFileAttributesEx(szPath, GetFileExInfoStandard, &wfad))
	{
		return 1;
	}
	//显示相关信息
	printf("创建时间 : \t");
	ShowFileTime(&(wfad.ftCreationTime));
	printf("最后访问时间 : \t");
	ShowFileTime(&(wfad.ftLastAccessTime));
	printf("最后修改时间 : \t");
	ShowFileTime(&(wfad.ftLastWriteTime));

	//显示文件的大小
	ShowFileSize(wfad.nFileSizeHigh, wfad.nFileSizeLow);
	//显示文件属性
	ShowFileAttrInfo(wfad.dwFileAttributes);
	return 0;
}

DWORD ShowFileTime(PFILETIME lptime)
{
	//文件时间结构
	FILETIME ftLocal;
	//系统时间结构
	SYSTEMTIME st;
	//调整为系统所在时区的时间
	FileTimeToLocalFileTime(lptime, &ftLocal);
	//将文件时间格式转换
	FileTimeToSystemTime(&ftLocal, &st);
	//显示时间字符
	printf("%4d year  %2d month  %2d day, %#02d:%#02d:%#02d\n", st.wYear, st.wMonth, st.wDay, st.wMinute, st.wSecond);
	return 0;
}
DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow)
{
	ULONGLONG liFilesize;
	liFilesize = dwFileSizeHigh;
	//移动到32位
	liFilesize <<= sizeof(DWORD) * 8;
	liFilesize += dwFileSizeLow;
	printf("文件大小 : \t%I64u字节\n", liFilesize);
	return 0;
}
DWORD ShowFileAttrInfo(DWORD dwAttribute)
{
	//一次判断文件的属性并显示
	printf("文件属性 : \t");
	if (dwAttribute & FILE_ATTRIBUTE_ARCHIVE)
	{
		printf("ARCHIVE\N");
	}
	if (dwAttribute & FILE_ATTRIBUTE_COMPRESSED)
		printf("压缩文件");
	if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY)
		printf("目录文件");
	if (dwAttribute & FILE_ATTRIBUTE_ENCRYPTED)
		printf("加密文件");
	if (dwAttribute & FILE_ATTRIBUTE_HIDDEN)
		printf("隐藏文件");
	if (dwAttribute & FILE_ATTRIBUTE_NORMAL)
		printf("Normal");
	if (dwAttribute & FILE_ATTRIBUTE_OFFLINE)
		printf("OFFLINE");
	if (dwAttribute & FILE_ATTRIBUTE_READONLY)
		printf("只读文件");
	if (dwAttribute & FILE_ATTRIBUTE_SPARSE_FILE)
		printf("sparse");
	if (dwAttribute & FILE_ATTRIBUTE_SYSTEM)
		printf("系统文件");
	if (dwAttribute & FILE_ATTRIBUTE_TEMPORARY)
		printf("临时文件");
	printf("\n");
	return 0;
}

//给文件添加其他属性
DWORD SetFileHiddenAndReadOnly(LPSTR szFileName)
{
	//获取原来的属性
	DWORD dwFileAttributes = GetFileAttributes(szFileName);
	//添加
	dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
	dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;
	//设置文件属性,并判断是否成功
	if (SetFileAttributes(szFileName, dwFileAttributes))
	{
		printf("文件 %s 的隐藏和属性设置成功\n", szFileName);
	}
	else
	{
		printf("文件设置失败 %d\n", GetLastError());
	}
	return 0;
}

//对文件进行复制,删除,移动
int main(int argc, PCHAR argv[])
{
	if (0 == lstrcmp("-d", argv[1]) && argc == 3)
	{
		if (!DeleteFile(argv[2]))
		{
			printf("删除文件错误!\n");
			return 1;
		}
		else
		{
			printf("删除文件成功!\n");
		}
	}
	else if (0 == lstrcmp("-c", argv[1]) && argc == 4)//复制文件
	{
		if (!CopyFile(argv[2], argv[3], TRUE))
		{
			//lastError == 0X50,文件存在
			if (GetLastError() == 0x50)
			{
				printf("文件已经存在,是否覆盖? Y/N", argv[3]);
				if ('y' == getchar())
				{
					//复制,覆盖已经存在的文件
					if (!CopyFile(argv[2], argv[3], FALSE))
					{
						printf("复制文件错误!\n");
					}
					else
					{
						printf("复制成功!\n");
					}
				}
				else
					return 0;
			}
		}
	}
	else if (0 == lstrcmp("-m", argv[1]) && argc == 4)
	{
		if (!MoveFile(argv[2], argv[3]))
		{
			printf("移动文件错误\n");
		}
		else
		{
			printf("参数错误!\n");
		}
	}

	return 0;
}
时间: 2024-07-30 22:23:09

VC下文件的使用的相关文章

在VC下如何使用头文件unistd.h

头文件unistd.h是Linux/Unix的系统调用,包含了许多UNIX系统服务函数原型,如open.read.write._exit.getpid等函数.在linux下能够编译通过的包含此头文件的程序,在VC下编译时出现了如下问题 fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory 其实解决这个问题的方法并不难,只要在你的默认库文件夹下(我的电脑是D:\Program Files

VC++下封装ADO类以及使用方法

操作系统:windows 7软件环境:visual studio 2008 .Microsoft SQL 2005本次目的:介绍一个已经封装的ADO类,简单说明怎么导入使用 首先声明一下,这个封装的ADO类是在[vc知识库 ]下载的,因为最近在数据库课程设计,所以对vc++下使用ADO连接数据库不是很了解,故若是本文有错误的地方的,请不吝指出.具体的ADO类各个封装功能请进入[原文地址 ]查看.在此仅介绍使用此ADO封装类的入门,如连接数据库,显示记录等.一个测试例子如下: 使用步骤:1.先从[

VC++下编译 程序“减肥”

在vc6 和 vs 2008下 编译 以下代码,不更改任何编译设置(vc6  40k , s2008 7k). 一.vc6下,Release 模式 编译处理. 1.去掉不必要的 链接库  工程(Project)-->设置(Settings)-->链接(link)属性页-->对象库/模块(object/library modules) 去掉所有的lib. 选择使用 MSVCRT.LIB kernel32.lib user32.lib. 可以忽略不必要的警告,比如 LINK:warning

VC下&#39;long&#39; followed by &#39;long&#39; is illegal

long long 类型在VC6.0编译错误 long long int 是GCC(GNU C)的64位表示法. VC里面只能用__int64 有两种解决办法: 1.只需要把long long 替换成__int64即可, 注意一定要点击下保存按钮否则头文件修改无效还是编译不通过 2.或者是:如下 stdint.h文件重新建立,并输入以下信息 /* ISO C9x 7.18 Integer types <stdint.h> * Based on ISO/IEC SC22/WG14 9899 Co

Win10系列:VC++ XML文件解析

XML文件按照元素标记来存储数据,通过遍历这些元素标记可以得到XML文件中所保存的数据.在C++/CX的类库中并未定义用于解析XML文件的类,但C++提供了能解析XML文件的框架和类库,如msxml4.libxml.IXMLDOM和TinyXML等,在使用C++/CX编写应用程序时可以通过C++提供的框架和类库来解析XML文件.TinyXML是一个轻量级解析XML的框架,本节将介绍如何使用此框架来解析一个XML文件. TinyXML框架包含了以下的类和函数,通过使用这些类和函数可以方便地读取一个

VC中文件(夹)目录与路径操作原理与代码实现

***********************************************声明************************************************************************************* 原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! ************

在VC下显示JPEG、GIF格式图像的一种简便方法

在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言  JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛的认可.GIF格式虽然仅支持256色但它对于颜色较少的图像有着很高的压缩率,甚至超过JPEG标准,也得到了广泛的认同.但作为众多程序员的一个重要的开发工具--Microsoft Visual C++ 6.0的MFC库却仅对没有经过任何压缩的BMP位图文件有着良好的支持,可以读取.显示.存储甚至在内存

【转】VC下的Unicode编程

转自http://www.leewei.org/?p=1304 UniCode简述 在Windows下用VC编程,如果编写的程序要在多种语言环境下运行(比如日文.中文.葡萄牙文等),使用VC默认的MBCS编译选项就会出现乱码,甚至导致程序崩溃.要克服这一缺点,就需要使用Unicode编程,简要说明一下Unicode: Unicode也是一种字符编码方法,它占用两个字节(0000H—FFFFH),容纳65536个字符,这完全可以容纳全世界所有语言文字的编码.在Unicode里,所有的文字都按一个字

VC下加载多种格式图片的方法总结IPicture, CxImage, CImage(AtlImage), CPictureEx

尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是常常要用到的.这里我给大家介绍两种办法来操作这些格式的图片. 1.用API OleLoadPicture来加载JPG.GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明) OleLoadPicture 函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以通过这个COM接口来操作图片(实际上你也可以用API OleCrea