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();