Avatar billede assassin Juniormester
05. september 2005 - 13:14 Der er 5 kommentarer og
1 løsning

Omdøb fil

Jeg skal have omdøbt nogle filer og har nedenstående kode, men jeg får en access violation ved linien med if PChar.

alle understregninger skal fjernes fra filnavnet og det næste bogstav skal derefter være stort.

Nogle, der kan se fejlen.


procedure TForm1.BtnSoegClick(Sender: TObject);
VAR
  SearchRec  : TSearchRec;
  CPath      : String;
  i          : integer;
  NuvaerendeFilnavn, NytFilnavn : string;
  fil        : File;
begin
  if FindFirst(IncludeTrailingBackslash(Edit1.Text)+'*.txt',faANYFILE,SearchRec) = 0 then
  repeat
    if (SearchRec.Attr and faSysFile = 0) and
      (SearchRec.Attr and faDIRECTORY = 0) and
      (SearchRec.Attr and faVolumeID = 0) and
      (SearchRec.Name <> '.') and
      (SearchRec.Name <> '..') then
    begin
      StatusBar1.simpleText:= 'Søger i '+IncludeTrailingBackslash(Edit1.Text);
      AssignFile(fil, SearchRec.Name);
      NytFilnavn:= '';
      For i := 1 to Length(SearchRec.Name) do
      begin
        if PChar(SearchRec.Name[i])^ in ['a'..'z','A'..'Z'] then NytFilnavn[i] := SearchRec.Name[i]else <<<< Her kommer fejlen.
        if SearchRec.Name[i] = '_' then NytFilnavn[i] := ' ';
      end;
      Rename(fil, NytFilnavn);
    end;
  until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
Avatar billede hatecaps Nybegynder
05. september 2005 - 13:26 #1
du kan ikke bruge nytfilnavn[i] da du har sat den til '' tidligere.

prøv med

      For i := 1 to Length(SearchRec.Name) do
      begin
        if SearchRec.Name[i] in ['a'..'z','A'..'Z'] then NytFilnavn := NytFilnavn + SearchRec.Name[i] else        if SearchRec.Name[i] = '_' then NytFilnavn := NytFilnavn + ' ';
      end;
Avatar billede assassin Juniormester
05. september 2005 - 13:57 #2
glimrende, det virker.

Ved rename(fil, nytfilnavn);

får jeg en file not found fejl.

Hvorfor?

Hatecaps - smid et svar, så du kan få dine velfortjente points
Avatar billede hatecaps Nybegynder
05. september 2005 - 14:02 #3
fordi du skal angive det fulde navn på den oprindelige fil, ikke din Fil variabel

altså

renamefile(IncludeTrailingBackslash(Edit1.Text)+searcrec.name,nytfilnavn)

men pas på at brugeren i mellemtiden ikke kan ændre indholdet i edit1 ;)
Avatar billede assassin Juniormester
05. september 2005 - 14:13 #4
Filen bliver ikke omdøbt, der sker intet med den.

Er der nogle bud?
Avatar billede hatecaps Nybegynder
05. september 2005 - 14:23 #5
det kan skyldes at der allerede findes en fil med det navn du vil give den.

prøv at smide en showmessage med

showmessage('Gl navn : '+IncludeTrailingBackslash(Edit1.Text)+searcrec.name+#13#10+'Nyt navn : '+nytfilnavn);

ind før renamefile og se hvad den egentlig forsøger.
Avatar billede assassin Juniormester
05. september 2005 - 14:32 #6
Jeg har fundet ud af det.

det skal selvfølgelig være:

RenameFile(IncludeTrailingBackslash(Edit1.Text)+SearchRec.name,IncludeTrailingBackslash(Edit1.Text)+NytFilnavn)

Så den ligger det rigtige sted.

Tak for hjælpen.
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