begin process at 2008 08 21 05:31:29
1 229 217 membres
48 nouveaux aujourd'hui
14 260 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Utilisation de Fichiers txt en C++.net [ Divers / Débutant(e) ] (zebulon88)

Utilisation de Fichiers txt en C++.net le 19/07/2008 00:03:45

zebulon88
Bonjour à tous,

j'ai deux questions :
- J'utilise visual c++.net express 2008, et je cherche à lire uniquement les dernières lignes d'un fichier txt très volumineux sans lire l'intégralité du fichier. Comment faire?
- J'ai une multitude de fichiers txt de noms divers que je voudrais "concaténer" en un seul gros fichier txt.

Pourriez vous m'aider?

Merci beaucoup.

Re : Utilisation de Fichiers txt en C++.net le 19/07/2008 13:05:23

Neo_Fr
Membre Club
Salut,
En .Net j'en ai aucune idée mais en pure C ca donnerait ca:

DWORD __stdcall FileConcat(LPSTR lpszDstFile, LPSTR lpszSrcFile)
{
    HANDLE hSrcFile, hDstFile;
    DWORD dwRet = 1, dwFileSize, br, bw;
    BYTE* lpBuffer;
    hSrcFile = CreateFile(lpszSrcFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
    if(hSrcFile == INVALID_HANDLE_VALUE) return 1;
    hDstFile = CreateFile(lpszDstFile, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
    if(hDstFile == INVALID_HANDLE_VALUE) goto _Error;
    lpBuffer = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, 0x100000); // 1mo
    if(!lpBuffer) goto _Error;
    dwFileSize = GetFileSize(hDstFile, 0);
    SetFilePointer(hDstFile, dwFileSize, 0, FILE_BEGIN);
    while(1)
    {
        if(!ReadFile(hSrcFile, lpBuffer, 0x100000, &br, 0)) goto _Error;
        if(!br) break;
        if(!WriteFile(hDstFile, lpBuffer, br, &bw, 0)) goto _Error;
    }
    dwRet = 0;
   _Error:
    if(lpBuffer) HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, lpBuffer);
    if(hDstFile) CloseHandle(hDstFile);
    if(hSrcFile) CloseHandle(hSrcFile);
    return dwRet;
}

Neo_Fr

Re : Utilisation de Fichiers txt en C++.net le 19/07/2008 16:20:35

SAKingdom
Membre Club
BOOL FileConcat(LPSTR lpszDstFile, LPSTR lpszSrcFile)
{
    HANDLE hSrcFile, hDstFile;
    BOOL ret = FALSE;
    BYTE* lpBuffer;

    hSrcFile = CreateFile(lpszSrcFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
    if(hSrcFile != INVALID_HANDLE_VALUE) {
        hDstFile = CreateFile(lpszDstFile, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
        if(hDstFile != INVALID_HANDLE_VALUE) {
            if((lpBuffer = (BYTE*)HeapAlloc(GetProcessHeap(), 0, 0x100000))) { // 1mo
                SetFilePointer(hDstFile, 0, 0, FILE_END);

                while(1) {
                    DWORD dummy;

                    if(!ReadFile(hSrcFile, lpBuffer, 0x100000, &dummy, 0)) goto _Error;
                    if(!dummy) break;
                    if(!WriteFile(hDstFile, lpBuffer, dummy, &dummy, 0)) goto _Error;
                }

                ret = TRUE;

            _Error:
                HeapFree(GetProcessHeap(), 0, lpBuffer);
            }
            CloseHandle(hDstFile);
        }
        CloseHandle(hSrcFile);
    }

    return ret;
}

C++ (@++)


Re : Utilisation de Fichiers txt en C++.net le 19/07/2008 17:29:26

NairodDorian
1) Utilise la class StreamReader et utilise la méthode Seek.
2) Pour lister tous les fichiers Directory.GetFiles(); qui renvoi un tableau de String.

Re : Utilisation de Fichiers txt en C++.net le 20/07/2008 00:24:05

zebulon88
ok merci,

j'ai rencontré plusieurs fois pour la méthode seek sur les forums mais je n'arrive pas à l'utiliser correctement.
L'aide de msdn donne :
FileStream^ fileStream = gcnew FileStream( fileName,FileMode::Create );
/.../
fileStream->Seek( 0, SeekOrigin::Begin );
le 0 spécifie le décalage,  s'agit-il du nombre de ligne de décalage? (je ne connais pas le nombre de ligne de mon fichier txt...)
SeekOrigin::Begin Spécifie le début, la fin ou la position actuelle en tant que point de référence pour origin.
Or j'ai besoin de récupérer les dix dernières lignes d'un fichier txt de nombre de ligne inconnu...

Pourriez vous m'aider avec un exemple ?

merci

Re : Utilisation de Fichiers txt en C++.net le 20/07/2008 10:21:44

NairodDorian

Non le nombre qui indique le décalage est le nombre d'octets.
Comme je l'ai dis utilise plutôt la classe StreamReader puisque tu lis un fichier txt.
FileStream spécialisé dans la lecture d'octets.
StreamReader spécialisé dans la lecture de chaine de caractères.


Re : Utilisation de Fichiers txt en C++.net le 20/07/2008 16:16:09

zebulon88

J'ai essayé un truc avec les stream reader mais rien n'est finalement écris dans mon fichier resultat.txt.

StreamReader^ sr =
gcnew StreamReader( "test.txt" );

StreamWriter^ sw = gcnew StreamWriter( "result.txt");

sr->BaseStream->Seek(-1024,SeekOrigin::End);

while (sr->Peek() >= 0){

sw->WriteLine(sr->ReadLine());

}


Re : Utilisation de Fichiers txt en C++.net le 20/07/2008 16:27:37

zebulon88

J'ai trouvé readtoend qui me permet de lire jusqu'a la fin du fichier.
Mais en fait je ne peux pas lire les dernières lignes de mon fichier initial  il s'arrete avant d'arriver à la toute fin...

sr->BaseStream->Seek(-200004,SeekOrigin::End);

sw->WriteLine(sr->ReadToEnd());



Classé sous : fichier, net, fichiers, txt, utilisation

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
extraction dinformatio...
Budget : 300€
campagne Adwords
Budget : 5 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS