李国帅 编于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);