tiedostot

teen koodia borlandin c builderilla, olen tehnyt ohjleman missä käytetään drivelistbox:ia ja directorylistbox:ia joilla käyttäjä valitsee halutun kansion. Ongelma on seuraava:
kun olen valinnut halutun kansion ja esim. tiedoston ja otan sen koodissa string muuttujaan on se esim. muotoa c:\temp\tiedoto.txt, mikä on onglemallista koska en pysty käsittelemään tätä stringmuuttujan sisältämää tiedostoa esim. _unlink komennolla että se tuhoutuisi koska unlinkissa pitää olla tiedostopolussa 2 KENOVIIVAA peräkkäin yhden sijasta! Eli jos nuo kenot olisivat tuplia niin silloin toimii, nyt ei..! turhauttavaa, sama pätee myös _findfirst ja _findnext komennoilla..!! mitä siis teen että saan tämän toimimaan? typerää olisi lähteä silmukassa yksitellen liäämään jokaiseen haettuun tietoon toiset kenoviivat.. miten tulisi toimia?
6364
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

filenamessa ois vaikka se tiedosto c:\omat\filu.txt

niin tee toinen
muuttuja johon pistät sitten saman nimen kahdella kenolla.

teet funktio joka tekee tuon muutoksen ja jota on helppo kutsua.

string lisaa_kenot(string 1)
{
replace() blaalaaaa;

return muutettu;
}


sitte vaan

while(_findnext)
{
if(jotain)
{
_ulink(lisaa_kenot(filename));
}
}

Äänestä

kuulostaapa omituiselta normaalisti tuota muunnosta ei tarvia koska luet directory polun suoraa komponentista, kai olet tarkistanut asian debugauksen aikana ?

kun kyseessä on borland voit käytää DeleteFile funktiota (SysUtils.hpp) ja myös FindFirst ja FindNext borlannin toteutuksina löytyy.

drivelistbox ja directorylistbox on peräisin ikivanhasta windowsin 3.11 versiosta. SelectDirectory kutsu hoitaa homman paremmin...


merkit saat muutettua parhaiten:

AnsiString uusi = StringReplace(vanha, '\\', "\\\\", TReplaceFlags()

Äänestä
  • miten niin normaalisti ei tarvita?
    Koska esim. _unlink ja _findfirst tarvitsevat juuri ne tupla kenot!!
    Jos otat polun komponentista muuttujaan (string) seuraavasti:
    folder=DirectoryListBox1->Directory;
    ja tulostat muuttujan näytölle niin ei siinä ole kuin yhdet kenot! jos koitat nyt käyttää tätä string-muuttujaa esim. _unlink:issa nii eipä toimi, mutta kun tuplaa kenot niin johan toimii!!
    Eli näyttäs siltä että borland toimii näin ja sillä sipuli, minusta tuo on jotenkin niin syvältä.. lähteä nyt rakentaan tuota varten erillistä kutsuttavaa funktiota millä tuplata kenot..!!?

    Äänestä

  • eipä muuten ainakaan minun borlandista löytynyt tuota DeleteFile-funktiota..!?

    Äänestä

  • ggt kirjoitti:

    miten niin normaalisti ei tarvita?
    Koska esim. _unlink ja _findfirst tarvitsevat juuri ne tupla kenot!!
    Jos otat polun komponentista muuttujaan (string) seuraavasti:
    folder=DirectoryListBox1->Directory;
    ja tulostat muuttujan näytölle niin ei siinä ole kuin yhdet kenot! jos koitat nyt käyttää tätä string-muuttujaa esim. _unlink:issa nii eipä toimi, mutta kun tuplaa kenot niin johan toimii!!
    Eli näyttäs siltä että borland toimii näin ja sillä sipuli, minusta tuo on jotenkin niin syvältä.. lähteä nyt rakentaan tuota varten erillistä kutsuttavaa funktiota millä tuplata kenot..!!?

    en kyllä ymmärrä vieläkään ymmärrä mihin niitä kaksoiskenoviivoja tarvitaan.

    Ainakin itselläni toimii seuraava:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {

    // päivitetään directory muutuja
    DirectoryListBox1->OpenCurrent();

    // oletetaan että hakemistossa on tiedosto nimeltä txt.txt
    // Lisätään viimeinen keno koska DirextoryListBox ei sitä lisää.
    AnsiString file = DirectoryListBox1->Directory "\\txt.txt";

    Application->MessageBox(file.c_str(),"tuhotaan");
    // delete
    if (_unlink(file.c_str()) == -1)
    {
    Application->MessageBox(AnsiString(errno).c_str(),"VIRHE");
    }

    }

    oletko aivan varma että et ole sekoittanut merkkiä '\\' näkyy tulostettaessa käyttäjälle merkkinä \ ja debuggeri käytää kaksoiskenoviivoja että ei sekaannu muihin merkkeihin '\t' '\e' '\n' '\r' jne... kuten myös koodissa _unlink("c:\\teksti.txt"); joka tarkoitaa selväkielisenä c:\teksti.txt

    tuo DeleteFile löytyy 6 versiosta

    #include

    samasta paikasta löytyy myös FindFirst ja FindNext ja FindClose.

    Äänestä

Komponenttipaletin 'Dialogs' välilehdelä on tarkoitukseen sopivia keskuskeluruutuja: 'OpenDialog', 'SaveDialog' ja 'PrintDialog'. Eiköhän niillä homma etene, kun pudotat näitä lomakkeelle.
Keskusteluruutu näytetään niille kaille yhteisellä metodilla Execute() . Vaikka esim...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->DefaultExt = "TXT"; //filtteri
OpenDialog1->FileName = "Lue minut.txt "; //jos polku niin "C:\\OmatJutut\\Testi\\Lue minut.tx"
if (OpenDialog1->Execute())
{
Memo1->Lines->LoadFromFile(OpenDialog->FileName);
Form2->Show();
}
return;
}
Luo Memo1:stä varten ihka oma kakkos-lomakke, - Form2 -, niin homma on hanskassa. Memon 'Properties' 'ReadOnly' pitää muutoksia varten olla 'false'.
Helppi kertoo esimerkeissä millaista koodia SaveToFile() ja PrintToFile() vaatii.

Äänestä

Kommentoi aloitusta


ter kirjoitti:

teen koodia borlandin c builderilla, olen tehnyt ohjleman missä käytetään drivelistbox:ia ja directorylistbox:ia joilla käyttäjä valitsee halutun kansion. Ongelma on seuraava:
kun olen valinnut halutun kansion ja esim. tiedoston ja otan sen koodissa string muuttujaan on se esim. muotoa c:\temp\tiedoto.txt, mikä on onglemallista koska en pysty käsittelemään tätä stringmuuttujan sisältämää tiedostoa esim. _unlink komennolla että se tuhoutuisi koska unlinkissa pitää olla tiedostopolussa 2 KENOVIIVAA peräkkäin yhden sijasta! Eli jos nuo kenot olisivat tuplia niin silloin toimii, nyt ei..! turhauttavaa, sama pätee myös _findfirst ja _findnext komennoilla..!! mitä siis teen että saan tämän toimimaan? typerää olisi lähteä silmukassa yksitellen liäämään jokaiseen haettuun tietoon toiset kenoviivat.. miten tulisi toimia?

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