CStdioFile FontenFile,KTenFile;
//CFileException fileException;
if ( !FontenFile.Open( ExePath+"\\fonten.txt", CFile::modeRead, &fileException ) )
{
((CListBox *)(pWnd->GetDlgItem(IDC_LIST1)))->AddString("Can't open fonten.txt....");
pWnd->GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
pWnd->GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
::CoUninitialize();
DWORD EXITCODE;
GetExitCodeThread(g_pThread,&EXITCODE);
AfxEndThread(EXITCODE);
return TRUE;
TRACE( _T("Can't open file %s, error = %u\n"),ExePath, fileException.m_cause );
}
if ( !KTenFile.Open( ExePath+"\\KTen.txt", CFile::modeRead, &fileException ) )
{
((CListBox *)(pWnd->GetDlgItem(IDC_LIST1)))->AddString("Can't open KTen.txt....");
pWnd->GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
pWnd->GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
::CoUninitialize();
DWORD EXITCODE;
GetExitCodeThread(g_pThread,&EXITCODE);
AfxEndThread(EXITCODE);
return TRUE;
TRACE( _T("Can't open file %s, error = %u\n"),ExePath, fileException.m_cause );
}
KTEN第二次无论如何都不能打开
第一次打开后,绝对有close,这个不用怀疑
8 个解决方案
#1
这种一般都是没Close造成的。
但是楼主说不是,那好
1.Throw读取Exception看结果吧
2.getlastError直接ErrorLookup
但是楼主说不是,那好
1.Throw读取Exception看结果吧
2.getlastError直接ErrorLookup
#2
从你的代码看 就可能有问题
if(FontenFile.Open()) //成功
{
}
if(KTenFile.Open()) //失败
{
//FontenFile没有关闭
return ;
}
if(FontenFile.Open()) //成功
{
}
if(KTenFile.Open()) //失败
{
//FontenFile没有关闭
return ;
}
#3
KTenFile.close后面加个KTenFile.~CStdioFile();就好了
我单单close还不行么。。。。。
#4
两个txt第一次都可以打开,第二次FontenFile可以打开,kten不行
#5
查到了,sharingViolation
不明白为何。。。。
#6
1:CoUninitialize()为何多次调用,这函数一个线程只能调用一次就好了解,你这里有两处调用。
2另外你的程序是多线程的么,sharingViolation是共享违例,我把它称为共享强奸,线程的执行不同步,导致一个占用,另一个却要打开,会出现sharingViolation,需要线程同步/锁这类的。如果不是多线程,有可能文件太大,虽然代码已经执行了close,但文件写入物理介质时需要较长时间,也会导致文件被占用,第二次打开时出现sharingViolation。
2另外你的程序是多线程的么,sharingViolation是共享违例,我把它称为共享强奸,线程的执行不同步,导致一个占用,另一个却要打开,会出现sharingViolation,需要线程同步/锁这类的。如果不是多线程,有可能文件太大,虽然代码已经执行了close,但文件写入物理介质时需要较长时间,也会导致文件被占用,第二次打开时出现sharingViolation。
#7
另一个程序正在使用此文件,进程无法访问。
#8
kten比fonten小好多好多
#1
这种一般都是没Close造成的。
但是楼主说不是,那好
1.Throw读取Exception看结果吧
2.getlastError直接ErrorLookup
但是楼主说不是,那好
1.Throw读取Exception看结果吧
2.getlastError直接ErrorLookup
#2
从你的代码看 就可能有问题
if(FontenFile.Open()) //成功
{
}
if(KTenFile.Open()) //失败
{
//FontenFile没有关闭
return ;
}
if(FontenFile.Open()) //成功
{
}
if(KTenFile.Open()) //失败
{
//FontenFile没有关闭
return ;
}
#3
KTenFile.close后面加个KTenFile.~CStdioFile();就好了
我单单close还不行么。。。。。
#4
两个txt第一次都可以打开,第二次FontenFile可以打开,kten不行
#5
查到了,sharingViolation
不明白为何。。。。
#6
1:CoUninitialize()为何多次调用,这函数一个线程只能调用一次就好了解,你这里有两处调用。
2另外你的程序是多线程的么,sharingViolation是共享违例,我把它称为共享强奸,线程的执行不同步,导致一个占用,另一个却要打开,会出现sharingViolation,需要线程同步/锁这类的。如果不是多线程,有可能文件太大,虽然代码已经执行了close,但文件写入物理介质时需要较长时间,也会导致文件被占用,第二次打开时出现sharingViolation。
2另外你的程序是多线程的么,sharingViolation是共享违例,我把它称为共享强奸,线程的执行不同步,导致一个占用,另一个却要打开,会出现sharingViolation,需要线程同步/锁这类的。如果不是多线程,有可能文件太大,虽然代码已经执行了close,但文件写入物理介质时需要较长时间,也会导致文件被占用,第二次打开时出现sharingViolation。
#7
另一个程序正在使用此文件,进程无法访问。
#8
kten比fonten小好多好多