请指教,我写了下面一段创建文件夹的代码,文件夹有两层结构"Temporary"下面还有六个子文件夹"ImageSet0"--"ImageSet5"。当文件夹生成之后,我手动删除,再次创建会有问题。不知道为什么,请大虾们给点建议,看看我的代码有什么问题?谢谢!HRESULT FMRITempDB::CreateTempFile()
{
    try
    {        // Create "Temporary" folder
        csTempPath = _T("E:\\Temporary");
        bRes = ::CreateDirectory( csTempPath, NULL );
        if ( FALSE == bRes )
        {
            return E_FAIL;
        }        for ( i = 0; i <= 5; i++ )
        {
            CString csNum.Fomat( _T("%d"), i );
            CString csImgPath = csTempPath + _T("\\ImageSet") + csNum;            bRes = ::CreateDirectory( csImgPath, NULL );
            if ( FALSE == bRes )
            {
                  return E_FAIL;
            }
        }
        return S_OK;
    }
    catch (...)
    {
        return E_FAIL;
    }
}

解决方案 »

  1.   

    CString csNum.Fomat( _T("%d"), i );
     可以这样用??
      

  2.   

    To:striking
    CString csNum.Fomat(_T("%d"), i);
    不可以在声明的时候直接用,我原先的代码比较长,我节选了其中主要的部分,但是有些变量的声明就没有了,我为了方便,就直接入上面所写了,所以请大家见谅。To:handsomerun
    创建时可能会出现错误,但不稳定,也就是说有的时候有错,有的时候做同样的操作就没有错误了。跟踪不到出现错误的地方。只是看event log显示创建文件的地方出错了。
    在我的程序里面启动了两个线程,会不会与这个有关。STA与MTA有关系么?
      

  3.   

    测试了一下,楼主的程序没什么问题啊,除了下面一句需要改以外CString csNum.Fomat( _T("%d"), i ); 改为CString csNum;
    csNum.Format( _T("%d"), i );反复按照楼主的方法运行也没问题
      

  4.   

    TO:BombZhang
    代码是没有问题TO:handsomerun
    就是一个MTA线程对文件夹进行操作。与超线程有没有关系呢?
      

  5.   

    创建失败的话,能不能用GetLastError看看是什么错误呢嗯,嗯
    把出错code弄出来
      

  6.   

    我用GetLastError试过,当时我是把文件夹先创建出来,然后打开第一级文件夹,手动把其中六个子文件夹删掉,之后再用程序,把所用文件都删掉,再次创建就出错误了。说是文件夹正在被使用,所以出错。但是后来,我不打开这些文件夹,什么操作都不做,只是先删除文件夹,后创建文件夹,这样就产生错误了。而且错误很不稳定,再现错误让他再次产生,目前做不到。