Avatar billede becks_23 Nybegynder
15. september 2003 - 11:08 Der er 11 kommentarer og
1 løsning

Rename af flere filer

Hej

Jeg har denne funktion som omdøber filer:

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


  char oldname[256], newname[256];

  strcpy(oldname, this->Edit1->Text.c_str());
  strcpy(newname, this->Edit2->Text.c_str());

  ListView1->UpdateItems(0,N);



    Edit2->Text = ( test + IntToStr(N) + ".txt");

    if (rename(oldname, newname));
    {
    ShowMessage("OK");

    N++;
    }


}
Men nu vil jeg gerne have den til at omdøbe mange filer på en gang, sådan man ikke skal trykke på hver fil man vil omdøbe. Kan ikke rigtigt komme videre.

På forhånd tak.
Avatar billede arne_v Ekspert
15. september 2003 - 11:11 #1
rename funktionen er grundliggende den samme og kan kun rename en af
gangen.

Det er imidlertid ikke noget problem at kalde rename inde fra en for løkke.

Jeg formoder at det er nemt at fiske fra-filnavnene ud af en multi-select.

Det store problem er at finde til-filnavnene.

Hvordan vil du konstruere dem ?
Avatar billede borrisholt Novice
15. september 2003 - 11:11 #2
Avatar billede becks_23 Nybegynder
15. september 2003 - 11:19 #3
>> arne_v: Er ikke helt med på hvad du mener, har ikke rodet så længe med c++.

>> jens b: kan ikke lige gennemskue hvad dit stykke kode gør.

tak for de hurtige reply
Avatar billede arne_v Ekspert
15. september 2003 - 11:29 #4
Det er ikke så svært at modificere din kode til:

for(int i = 0; i < [antal filer der skal renames]; i++) {
    strcpy(oldname, [gamle fil navn for denne fil]);
    strcpy(newname, [????]);
    rename(oldname, newname);
}

Jeg formoder at det er nemt at finde både [antal filer der skal renames]
og [gamle fil navn for denne fil] !

Problemet er at finde [????] !

det er muligt at du bare kan bruge:

(test + IntToStr(i) + ".txt").c_str()

som din kode antyder, men generelt er det et problem.
Avatar billede becks_23 Nybegynder
15. september 2003 - 11:42 #5
Okay, super... Min mening var at listview skulle styre antallet af filer og de gamle filnavne. Men jeg kan kun hive en ud af gangen, ved ikke helt hvordan jeg får alt inholdet ud.?
Hvad kan problemet være med (test + IntToStr(i) + ".txt").c_str().??
Avatar billede borrisholt Novice
15. september 2003 - 11:53 #6
Mit kode sletter etc, med Wild cards præcis som man fra de gode gamle DOS dage. JEg lader blot WIndows om det hårde arbejde.

Jens B
Avatar billede arne_v Ekspert
15. september 2003 - 11:55 #7
"men generelt er det et problem." hentyder ikke til din kode, men til
at ofte er det et problem at generere til filnavnene.
Avatar billede arne_v Ekspert
15. september 2003 - 11:56 #8
Problemet kendes også fra d egode gamle DOS dage.

"ren *.dat *.txt" virker fint men "ren a*.txt b*.txt" virker ikke.
Avatar billede becks_23 Nybegynder
15. september 2003 - 14:24 #9
Jeg har prøvet at smide denne løkke ind, men den ser ikke ud til at virke:

Edit2->Text = ( test + IntToStr(N) + ".txt");

  for(int i = 0; i < OpenDialog1->Files->Count; i++)
  {
    strcpy(oldname, this->Edit1->Text.c_str());
    strcpy(newname, this->Edit2->Text.c_str());
    rename(oldname, newname);
  };
Kan jeg ikke bruger "OpenDialog1->Files->Count" til at stoppe løkken med??
Avatar billede theprofessor Nybegynder
15. september 2003 - 14:29 #10
win XP har nogen ny værktøjer til at rename stør antal filer på 1 gang..prøv at finde den ny funktion i windows XP SDK...
Avatar billede becks_23 Nybegynder
24. september 2003 - 13:47 #11
>> arne_v: lav et svar så får du point.
Avatar billede arne_v Ekspert
24. september 2003 - 19:15 #12
svar
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