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

李国帅 编于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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值