您的位置:首页 > 其它

获取某应用客户端的日志文件_32_另一个程序正在使用此文件,进程无法访问

2014-12-19 16:56 495 查看
const std::string GetCloudMusicLog()
{
	//home C:\Users\user\AppData\Local
	//log_path C:\Users\user\AppData\Local\**\**.log
	std::string log;
	wchar_t home[MAX_PATH];
	std::wstring log_path;
	int ret = SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, home);
	if (ret == S_OK)
	{
		log_path.append(home);
		log_path.append(L"\\**\\**\\**.log");
		ret = ReadLogFile(log_path,log);
	} 
	if (ret != 0)
	{	
			log.append("get **.log with error code ");
			std::stringstream ret_to;
			ret_to<<ret;
			log.append(ret_to.str());
	}
	return log;
}

int ReadLogFile( std::wstring file_path, std::string &file_buffer )
{	
	HANDLE pfile;
	pfile=::CreateFile(file_path.c_str(),GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,		NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL ,NULL);
	if(pfile==INVALID_HANDLE_VALUE)
	{
		CloseHandle(pfile);
		return ::GetLastError();
	}
	DWORD filesize=GetFileSize(pfile,NULL);
	file_buffer.resize(filesize);
	DWORD readsize;
	BOOL ret =ReadFile(pfile,&file_buffer[0],filesize-1,&readsize,NULL);
	if (ret != TRUE)
	{
		CloseHandle(pfile);
		return ::GetLastError();
	}
	CloseHandle(pfile);
	return 0;


错误描述:

使用fread读取文件发生错误。GetLastError返回32:另一个程序正在使用此文件,进程无法访问。

后关闭应用程序,则成功。

但后台获取客户端日志不能受另一进程影响。后改为CreateFile、ReadFile。解决问题。

ReadFile:支持同步、异步操作。能够操作通讯设备、管道、套接字、邮槽。

打开文件最好用CreateFile,而不是OpenFile。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐