CHashChainShow::CHashChainShow(char * cs)
{
//文件的写入
         HANDLE hFile;
        hFile=CreateFile("123.dat",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        DWORD dwsize;
        WriteFile(hFile,cs,strlen(cs),&dwsize,NULL);
CloseHandle(hFile);
}
当我传入的参数*cs比如是:"111111"(这些字符从IDET控件获取),可以正常创建123.dat文件,里面的内容也正式"111111"当我从一个文件中读取数据时,比如读取了abc.dat文件中的字符,然后将此字符传入到*cs参数中,就无法创建123.dat这个文件。
(注:我用getlasterror()函数查看,返回的结果是183,也就是说这个文件是存在的,但是文件夹内明明就是没有这个文件)。怀疑之后,我在另外一个函数里面用CreateFile()和ReadFile()再去读取123.dat,居然可以读取到123.dat里面的数据,但是此时仍然看不到文件的影子。大家有遇到过这种情况么?

解决方案 »

  1.   

    补充一下:即使从abc.dat读取的字符只有一个字符,也没法创建123.dat文件
      

  2.   

    当前路径的问题吧.你直接写"123.dat"并不保证在程序根目录,可能在debug里面,也可能在工程根目录,甚至是你刚才开FileDialog的地方.
      

  3.   

    CFile* pFile=new CFile();
    CFileException* e=new CFileException();
    char* szFull=new char[_MAX_PATH];
    char* szDrive=new char[_MAX_DRIVE];
    char* szDir=new char[_MAX_DIR];
    ::GetModuleFileName(NULL, szFull,_MAX_PATH);
    _splitpath(szFull, szDrive, szDir, NULL, NULL);
    CString curDir;
    curDir.Format("%s%s", szDrive, szDir);
    delete[] szFull;delete[] szDrive;delete[] szDir; if(!pFile->Open(curDir+"\\123.dat",CFile::modeRead|CFile::shareDenyNone,e))
    {
    char* errmsg=new char[255];
    e->GetErrorMessage(errmsg,255);
    MessageBox(errmsg,"错误"); delete[] errmsg;
    e->Delete();
    return;
    }
    这样curDir可以保证是exe所在目录..当然还有其他方法,google,百度一下吧
      

  4.   

    D0cKing,你答对了,我仔细看了看,果然在FileDialog的地方,谢谢你啊