用CStdioFile file;file.Open(....);
文件打开后,然后用
CString sData;
int hangNum=0;
//先判断共有多少行数据,似乎这样不好:(
while(fileout.ReadString(sData))
{
hangNum++;
}
//........ 接着下面操作!
file.SeekToBegin()
int hang =0;
m_progressCtrl.SetRange(0,hangNum-1);
while(fileout.ReadString(sData))
{
//上面想知道有多少行是为了下面进度条可以运作
m_progressCtrl.SetPos(hang);
hang++;
//......
然后是对sData数据处理的过程....
}如此方法好像很落后.有没有好些的方法,为了进度条可以运作,先ReadString
一次,好像太落后了!
文件打开后,然后用
CString sData;
int hangNum=0;
//先判断共有多少行数据,似乎这样不好:(
while(fileout.ReadString(sData))
{
hangNum++;
}
//........ 接着下面操作!
file.SeekToBegin()
int hang =0;
m_progressCtrl.SetRange(0,hangNum-1);
while(fileout.ReadString(sData))
{
//上面想知道有多少行是为了下面进度条可以运作
m_progressCtrl.SetPos(hang);
hang++;
//......
然后是对sData数据处理的过程....
}如此方法好像很落后.有没有好些的方法,为了进度条可以运作,先ReadString
一次,好像太落后了!
{
RECT rcClient;
int cyVScroll;
HWND hwndPB;
HANDLE hFile;
DWORD dwlen,dwnum=48;
LPCH pch;
LPCH pchTmp;
InitCommonControls();
GetClientRect(hwndParent, &rcClient);
cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPSTR) NULL, WS_CHILD | WS_VISIBLE,
rcClient.left, rcClient.bottom/2, rcClient.right, cyVScroll,
hwndParent, (HMENU) 0, hInst, NULL);
hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
if (hFile == (HANDLE) INVALID_HANDLE_VALUE)
return FALSE;
dwlen = GetFileSize(hFile, (LPDWORD) NULL);
SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, dwlen / dwnum));
SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0);
pch = (LPCH) LocalAlloc(LPTR, sizeof(char) * dwnum);
pchTmp = pch;
do {
ReadFile(hFile, pchTmp, sizeof(char) * dwnum, &dwlen,
(LPOVERLAPPED) NULL);
SendMessage(hwndPB, PBM_STEPIT, 0, 0);
} while (dwlen);
CloseHandle((HANDLE) hFile);
DestroyWindow(hwndPB);
return TRUE;
}
int lines=0;
while(!m_pFile.eof())
{
m_pFile.ignore(MAX_LINE_LEN,'\n');
lines++;
}
m_pFile.clear();
m_pFile.seekg(0,ios::beg);
{
n++;
}
比如说你可以在开始根据文件的大小设定一个最大值
然后分析一行proress.pos++。最后完了的时候再把它加到顶
个人认为:用户看到进度条的目的是确认程序没有死掉
m_progressCtrl.SetPos(0);CStdioFile file(_T("C:\\Test.txt"), CFile::modeRead);// 这里用于取得文件的大小
CFileStatus fs;
file.GetStatus(fs);CString strData;
while (file.ReadString(strData))
{
// 计算ProgressCtrl的进度
int nFilePos = file.GetPosition();
int nProgressCtrlPos = int(float(nFilePos) / fs.m_size * 100 + 0.5);
m_progressCtrl.SetPos(nProgressCtrlPos); // 处理strData
}