Bonjour � tous,
J'utilise un CFile pour lire un fichier texte depuis la fin. Le but est d'�viter de parcourir tout le fichier qui peut-�tre tr�s grand (plusieurs m�ga...) pour gagner du temps.
L'utilisation est un peu particuli�re car le fichier lu est continuellement �crit, mais de toutes fa�ons je ne cherche pas � r�cup�rer les lignes qui ont �t� �crites entre le moment o� j'ai ouvert le fichier et celui o� des lignes ont �t� rajout�es.
Le probl�me est que j'ai le message d'erreur suivant qui appara�t : "Seek failed on an unnamed file".
J'ai essay� mon code sur un fichier 'statique' et l�, pas de probl�me.
Est-ce que ma m�thode est bonne ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 CFile f; CFileException e; CString sLine = ""; int iLinesNumber = 0; bool bError =false; if(!f.Open(sLogFilePath,CFile::modeRead,&e)) return -1; int iShiftFromEnd = -1; char cCurrentChar = ' '; CString sTemp; CStringArray oFileNamesArray; oFileNamesArray.RemoveAll(); while(iLinesNumber < m_MaxDefect && !bError) //on lit chaque ligne du fichier en partant de la fin { f.Seek(iShiftFromEnd,CFile::end); if(f.Read(&cCurrentChar,1) == 0) bError = TRUE; if(cCurrentChar == '\n') //fin d'une ligne { if(sLine.Find("&&&",0)==0) //c'est une ligne qui contient un nom de fichier { ReadFileNameInLine(sLine,sTemp); // extraction du nom du fichier oFileNamesArray.Add(m_ImageDirectory + '\\' + sTemp); iLinesNumber ++; } sLine = ""; //on efface la ligne dans tous les cas } else sLine.Insert(0,cCurrentChar); iShiftFromEnd--; } f.Close();
Partager