0
点赞
收藏
分享

微信扫一扫

CreateFile不接受包含头尾空格的路径

TiaNa_na 2022-07-27 阅读 97


李国帅 编于2014/6/23 16:53:39


在实际中遇到了一下问题,录像下载失败,查询之后发现是文件名称的问题。

[192] CRTPRecvMng::StartRecord inFilename=F:\\***社区 点76 ***坊63号东面 \[2014-06-23_15.56.07]-[2014-06-23_16.06.07].avi

多了一个\

修改了之后还是不行

00000143 1.43336844 [3876] CRecordMedia::SetFileName test the file (F:\ ***社区 点76 ***坊63号东面\[2014-06-24_13.10.27]-[2014-06-24_13.14.48].avi) is failed.

00000144 1.43341243 [3876] CRTPRecvMng::StartRecord SetFileName failed hr=80070003

00000145 1.43345702 [3876] CRtspRecord::StartDownload end m_pRTPRecv->StartRecord failed. hr=0x80070057

Error: 80070003 - “The system cannot find the path specified”


这个目录在win7下没有问题,在winxp下有问题。

void CDownloadItem::OnBnClickedOk()
lstrcatA(m_szPath, m_Camera.Name);
CreateDirectoryA(m_szPath,NULL);
pDataEx->strFile.Format("%s\\[%04d-%02d-%02d_%02d.%02d.%02d]-[%04d-%02d-%02d_%02d.%02d.%02d].avi",
m_szPath,
dtBeg.year,dtBeg.month,dtBeg.day,dtBeg.hour,dtBeg.minute,dtBeg.second,
dtEnd.year,dtEnd.month,dtEnd.day,dtEnd.hour,dtEnd.minute,dtEnd.second );


通过测试发现即便是在win7中,CreateFile也不接受包含头尾空格的路径。

比如C:\ ddd \xx.txt,必须使用C:\ddd\xx.txt。


int StrTrim1(char* const strInfo,char* strDst)
{
if (strInfo == NULL)
{
return -1;
}
char* pHeader = strInfo;
size_t nLen = strlen(strInfo);
char* pTail = strInfo+nLen-1;
while(*pHeader == ' ' || *pHeader == '\0')//空格
{
if(pHeader == pTail)break;
pHeader++;
}
while(*pTail == ' ' || *pTail == '\0')//空格
{
if(pHeader == pTail)break;
pTail--;
}
if (pHeader != pTail)
{
memcpy(strDst,pHeader,pTail-pHeader+1);
strDst[pTail-pHeader+1] = 0;
}
return 0;
}
int main(void)
{
//char* pFileName = "F:\\ ***社区 点76 ***坊63号东面\\[2014-06-23_15.56.07]-[2014-06-23_16.06.07].avi";
char* pFilePath = "F:\\ ***社区 点76 ***坊63号东面 ";
char* pFileName = "\\[2014-06-23_15.56.07]-[2014-06-23_16.06.07].avi";
char pTemp[MAX_PATH];
StrTrim1(pFilePath,pTemp);
strcat(pTemp,pFileName);

HANDLE m_hFile = CreateFileA((LPCSTR) pTemp, // The filename
GENERIC_WRITE|GENERIC_READ, // File access
FILE_SHARE_READ, // Share access
NULL, // Security
CREATE_ALWAYS, // Open flags
(DWORD) 0, // More flags
NULL); // Template

if(m_hFile == INVALID_HANDLE_VALUE)
{
DWORD dwErr = GetLastError();
HRESULT hr = HRESULT_FROM_WIN32(dwErr);

printf("File :%s: %s: %d\n CreateFile failed. hr=%x GetLastError=%x.", __FILE__, __FUNCTION__, __LINE__ ,hr,dwErr);
return hr;
}
CloseHandle(m_hFile);


return getchar();
}

也可以使用库函数直接去掉两侧的空格

#include "Shlwapi.h"
TCHAR trim[ ] = TEXT(" \0");
char strCamera[MAX_PATH];
lstrcpy(strCamera,m_Camera.Name);
StrTrim(strCamera,trim);

举报

相关推荐

0 条评论