Avatar billede mad_man Nybegynder
05. februar 2005 - 21:21 Der er 10 kommentarer og
1 løsning

Find filer og ændre i dem (med under mapper)

hej eksperter :)
Jeg er i gang med at skrive et program der kan åbne en fil type og så finde en sekvens i filen og så skifte den ud med en anden sekvens. og dette skal også virke i undermapper
jeg har nogle problemer, jeg ved ikke hvordan jeg skal få den til og både finde under mapper, og finde kun de filer af den rigtige type.
jeg ved heller ikke lige hvordan man går ind i en fil og finder en speciel sekvens.

her er hvad jeg er nået fremtil lige nu:

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>

void Scan_folder(char *folder, char *type);
void editfile(char *file);

int main()
{
  Scan_folder("D:\\test\\", "txt");
  system("PAUSE");
 
  return 0;
}


void Scan_folder(char *folder, char *type)
{
  WIN32_FIND_DATA data;
  char spec[MAX_PATH];
  sprintf(spec,"%s*.*",folder/*,type*/);    //med type i stedet for * finder den ikke mapper
  HANDLE h = FindFirstFile(spec,&data);
  char currentfile[MAX_PATH];
 
  if(h!=INVALID_HANDLE_VALUE)
  {
    do
    {
        sprintf(currentfile,"%s",data.cFileName);
        if(!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
        {
            if( strncmp(currentfile,type,3) == 0 )        //her går det galt
            {
                sprintf(currentfile,"%s%s",folder,data.cFileName);
                printf("%s \r\n",currentfile);
                //editfile();
            }   
               
        }
        else if( strcmp(data.cFileName, ".") && strcmp(data.cFileName, "..") )
        {
            char subfolder[MAX_PATH];
            sprintf(subfolder,"%s%s\\",folder,data.cFileName);
            Scan_folder( subfolder, type );
        }
    }
    while(FindNextFile(h,&data));
  }
  FindClose(h);
}

void editfile(char *file)
{
    FILE *fp;
    fp = fopen(file,"rw");
   
    //her skal den så ændre 1234 i tekst dokumenterne med 4321
     
    fclose(fp); 
}
Avatar billede arne_v Ekspert
05. februar 2005 - 21:25 #1
strncmp(currentfile,type,3) == 0

tester om filnavnet starter med "txt" - du vil sikkert teste om det slutter
med "txt" !
Avatar billede arne_v Ekspert
05. februar 2005 - 21:26 #2
strcmp(currentfil+strlen(currentfile)-strlen(type), type) == 0

måske
Avatar billede mad_man Nybegynder
05. februar 2005 - 21:35 #3
jo tak, det virkede =)
har du så en god ide til hvordan man så finder en tekst streng inde i en fil og ændre den ?
Avatar billede arne_v Ekspert
05. februar 2005 - 21:38 #4
For at finde en sekvens i en fil bliver du nødt til at åbne den og læse alle linier
og checke om den streng du leder efter er i linien.

Det er ret nemt. Det svære kommer når du vil erstatte den.

Hvis den nye streng altid har samme længde som den gamle, så kan du
rette i filen.

Men ellers skal du skrive enten hele filen eller ihvertfald
resten af filen.
Avatar billede mad_man Nybegynder
05. februar 2005 - 22:22 #5
kan man få et simpelt eksempel på hvordan det skal gøres, og jov det er samme længde den skal ændres fra og til
på forhånd tak
Avatar billede arne_v Ekspert
05. februar 2005 - 22:52 #6
Jeg prøvet at bixe noget.
Avatar billede arne_v Ekspert
05. februar 2005 - 23:02 #7
Ikke noget super eksempel, men det erstatter en forekomst af 1234 med 4321 i de
første 10000 bytes.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  FILE *fp;
  int n;
  char *p;
  char buf[10000];
  fp = fopen("z.txt", "r+b");
  fseek(fp,0,SEEK_SET);
  n = fread(buf,1,sizeof(buf),fp);
  p = strstr(buf,"1234");
  if(p != NULL)
  {
      memcpy(p,"4321",strlen("4321"));
      fseek(fp,0,SEEK_SET);
      fwrite(buf,1,n,fp);
  }
  fclose(fp);
  return 0;
}
Avatar billede mad_man Nybegynder
05. februar 2005 - 23:39 #8
ahh takker, det virker lige som det skal

svar ?
Avatar billede arne_v Ekspert
05. februar 2005 - 23:40 #9
kommer her
Avatar billede arne_v Ekspert
05. februar 2005 - 23:43 #10
Husk at bruge en løkke hvis du ikke er sikker på at det der skal erstattes kommer
med i bufferen ved læsning fra offset 0.

Du kan også overveje ikke at skrive hele bufferen tilbage.

Mange muligheder men du er på rette vej.
Avatar billede mad_man Nybegynder
07. februar 2005 - 10:55 #11
jeg takker og bukker =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester