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

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。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值