arvo katoaa!!?

luupissa etsin tiedostoja findfirst ja findnext:llä, kuin olen löytänyt viimeisen, copion sen memcpy:llä muuttujaan, alan luupata kunnes tulee uudempi ja se kopioidaan toiseen muuttujaan, tämän teen niin että findnext ja kopiodaan muuttuja2:een jos sama niin uudestaan kunnes löytyy eri.. elikkä uudempi! ei vaan toimi? ihmettelen, askeltaessa huomaan että kun kopioin uuden findnextin muuttuja2:seen niin muuttuja1 kin jotenkin kummasti "tyhjenee"!
miksi näin? kuinka selviän?
11397
Äänestä

Muut lukivat myös

Vastaukset 11

Vanhimmat

Kai puskrit ovat tarpeeksi pitkiä, ettet kopio vahingossa toisen loputtua toisen päälle. ja muutujat eivät ole osoittimia joilla on sama arvo ?

Äänestä
  • char muuttuja[10];
    char muuttuja2[10]
    findnext...
    memcpy(muuttuja,c_file.name,sizeof(c_file.name);

    tiedoston nimen pitäisi hyvin mahtua taulukkoon!
    se menee sinne.. mutta kun etsin nyt uudestaan findnext
    ja memcpy(muuttuja2,c_file.name,sizeof(c_file.name);
    tämä jälkeen vertailu if:llä.. nyt muuttuja yksi ei enää pidäkkään sisällä tiedoston nimeä vaan se katosi!! minne ja miksi??

    Äänestä

  • aamu-uni kirjoitti:

    char muuttuja[10];
    char muuttuja2[10]
    findnext...
    memcpy(muuttuja,c_file.name,sizeof(c_file.name);

    tiedoston nimen pitäisi hyvin mahtua taulukkoon!
    se menee sinne.. mutta kun etsin nyt uudestaan findnext
    ja memcpy(muuttuja2,c_file.name,sizeof(c_file.name);
    tämä jälkeen vertailu if:llä.. nyt muuttuja yksi ei enää pidäkkään sisällä tiedoston nimeä vaan se katosi!! minne ja miksi??

    katsohan tuota kutsua uudelleen:

    memcpy(muuttuja,c_file.name,sizeof(c_file.name);

    sizeof(c_file.name) on io.h:ssa määritelty MAXPATH vakiolla joka on suurempi kuin 10 eli kopioit 260(?) merkkiä 10 merkin talukkoon joka menee yli ja rajusti, ja koska kääntäjä yleensä pistää taulukot peräkkäin muistiin se menee toisen alueelle.

    muuta taulukon koot:

    char muuttuja[MAXPATH];
    char muuttuja2[MAXPATH];

    ja memcpy kutsun korvaaminen strcpy() kutsulla lienee viisasta.

    Äänestä

siis kansiossa on tavaraa ja sinne aina silloin tällöin tulee lisää.. ja kun uusi tulee niin sille tehdään sit jotain!!
Eli etsitään uusin ja jäädään odottamaan seuraavan uudentuloa jota käytetään!!

tässä koodini! missä on vikä??
kun pistän koodin pyörimään ja lisään keskenkaiken uuden tiedoston kansioon niin eipäs se huomaakkaan sitä!! miksi??

int main()
{
   int i=0;
   char taulu[50]="c:\N*.*";

   struct   _finddata_t c_file;
   long hFile;

   hFile = _findfirst(taulu,&c_file);
   while(_findnext(hFile,&c_file) != -1L)
   {
   }
   
   while(i

Äänestä
  • Mikäli olen ymmärtänyt oikein, findnext pitää sisällään jotain tietoa (struct _finddata_t c_file;) joka ei päivity, findnext() luulee jo löytäneensä tiedoston ?


    eli varmaankin sinun pitää tehdä koko rutiini uudelleen aloittaen findfirst kutsusta ?

    Äänestä

  • _findclose( hFile );
    return 0;

    eli _findfirst ja findnext käyttämä muisti pitää vapauttaa. Tosin windows "yleensä" hoitaa tämän, mutta se on kuitenkin hyvä tehdä :)

    Äänestä

Aivan.. laitoin samaan silmukkaan jossa avaan ja suljen.. mutta nyt askeltaessa kun saavutaan close-kohtaan debuggeri hyppää valittamaan jostain user breakpointista!!??

Äänestä
  • Käyttäjän keskeytys ?

    tuo onkin jännä, tekeekö se sen aina close() kutsun kohdalla ? mutta ohjelma toimii oikein ?

    Äänestä

  • a kirjoitti:

    Käyttäjän keskeytys ?

    tuo onkin jännä, tekeekö se sen aina close() kutsun kohdalla ? mutta ohjelma toimii oikein ?

    no en pääse ajaan sitä koska se sammuu siihen aina vaikka pitäisi jäädä luuppaamaan.. kokeilin aluksi ihan yksinkertaista ja silloin toimi nyt kun struct find.. jubat on while luupissa jonka sisällä on etsimiset ja lopussa sulku.. se stoppaa sulkuun.. ei toimi!? miksi?

    Äänestä

  • aamu-uni kirjoitti:

    no en pääse ajaan sitä koska se sammuu siihen aina vaikka pitäisi jäädä luuppaamaan.. kokeilin aluksi ihan yksinkertaista ja silloin toimi nyt kun struct find.. jubat on while luupissa jonka sisällä on etsimiset ja lopussa sulku.. se stoppaa sulkuun.. ei toimi!? miksi?

    sulkuun tarkoitat _findclose() kutsua ?

    tämän kai pitäisi toimia ?
    #include
    #include
    #include
    #include


    int Find(char *arg)
    {
    struct _finddata_t c_file;
    long hFile;
    int i=0;
    hFile = _findfirst(arg,&c_file);
    while(_findnext(hFile,&c_file) != -1L)
    {
    i++;
    printf("%d filua %s
    ",i,c_file.name);
    }
    printf("


    %d filua %s
    ",i,c_file.name);
    _findclose(hFile);
    return i;
    }

    int main()
    {
    int i = 100;

    while(i--)
    {
       Find("*.c");
    Sleep(500);
    }
    return 0;
    }




    Jos etsit uusinta tiedostoa sinulla on pienoinen ongelma,

    struct _finddata_t c_file sisältää luonti ajan mutta ei FAT tiedostojärjästelmässä.

    Äänestä

  • a kirjoitti:

    sulkuun tarkoitat _findclose() kutsua ?

    tämän kai pitäisi toimia ?
    #include
    #include
    #include
    #include


    int Find(char *arg)
    {
    struct _finddata_t c_file;
    long hFile;
    int i=0;
    hFile = _findfirst(arg,&c_file);
    while(_findnext(hFile,&c_file) != -1L)
    {
    i++;
    printf("%d filua %s
    ",i,c_file.name);
    }
    printf("


    %d filua %s
    ",i,c_file.name);
    _findclose(hFile);
    return i;
    }

    int main()
    {
    int i = 100;

    while(i--)
    {
       Find("*.c");
    Sleep(500);
    }
    return 0;
    }




    Jos etsit uusinta tiedostoa sinulla on pienoinen ongelma,

    struct _finddata_t c_file sisältää luonti ajan mutta ei FAT tiedostojärjästelmässä.

    Jes, selvitin ongelman juuri.. teen luupin jossa etsii viimeisen ja samalla kasvattaa laskuria.. sen jälkeen luupataan alusta uudestaan ja kasvatetaan toista laskuria.. tehdään tätä niin kauan jotta laskurit eivät ole samat... ja tämä on sitten se uusin vastatullut joka otetaan talteen! :)

    Äänestä

Kommentoi aloitusta


aamu-uni kirjoitti:

luupissa etsin tiedostoja findfirst ja findnext:llä, kuin olen löytänyt viimeisen, copion sen memcpy:llä muuttujaan, alan luupata kunnes tulee uudempi ja se kopioidaan toiseen muuttujaan, tämän teen niin että findnext ja kopiodaan muuttuja2:een jos sama niin uudestaan kunnes löytyy eri.. elikkä uudempi! ei vaan toimi? ihmettelen, askeltaessa huomaan että kun kopioin uuden findnextin muuttuja2:seen niin muuttuja1 kin jotenkin kummasti "tyhjenee"!
miksi näin? kuinka selviän?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu