Avatar billede beorn Nybegynder
20. august 2003 - 15:26 Der er 9 kommentarer og
1 løsning

oprette foldere på et mappet netværksdrev

hejsa

jeg har et lille problem som jeg lige ville høre om nogen kunne hjælpe mig med.

jeg har lavet et lille program hvis funktion er at det skal skanne et drev/sti for directories og de directories som opfylder et bestemt kriterie skal den gå ind i og se om en bestemt mappe(f.eks. 2002 eller 2003) er oprettet. hvis den ikke er det skal den oprette den og x antal underfoldere hvis navne jeg har skrevet i et memobox.

alt dette virker fint på c:\drevet, men når jeg fortæller den at den skal gøre det på et af de to mappede netværksdrev hvor programmet faktisk skal bruges normalt (en gang årligt ihvertfald) tja så kører den mine løkker igennem fint nok, men den opretter ingen mapper.

er ret sikker på det er fordi det er netværksdrev, så en workaround ville være at bare køre programmet fra serveren og så bare vælge de mapper den skal køre programmet på. men det var jo meningen at sekretærene skulle kunne køre programmet.. og de skal sku ikke have lov til at logge ind på serverne.

har prøvet forskellige kommandoer til at oprette directories, men lige meget hjælper det. hvis jeg kører debuggeren kører den mine løkker fint igennem men den opretter ikke mapperne.

nogle ideer????
Avatar billede tolderlund Nybegynder
21. august 2003 - 09:01 #1
Den eneste ide jeg har er at der må være noget galt med din kode.
Vis os din kode, så kan vi måske se problemet.
Avatar billede benson Nybegynder
21. august 2003 - 09:32 #2
Hvad med rettigheder på netværket ?
Har du "lov" til at oprette mapper ?
Avatar billede beorn Nybegynder
21. august 2003 - 16:46 #3
har admin rettigheder, så det er der inten galt med. poster min kode når jeg kommer på arbejde i morgen. har ikke sendt den hjem
:-)
Avatar billede borrisholt Novice
22. august 2003 - 08:19 #4
Hvad siger GetLastError ?
Avatar billede beorn Nybegynder
22. august 2003 - 14:44 #5
procedure TForm1.LavMappe(mappenavn : string);
var
sr : Tsearchrec ;
s,k,l : string;
I : integer;
begin
s:= mappenavn;
if FindFirst(drev + ':' + '\*.*',faAnyFile,sr) = 0 then
  begin
    while (FindNext(sr) = 0) do
    begin
      if (sr.Attr = faDirectory) then
        begin
          L :=(drev +':\' + sr.name + '\' +s) ;
          if not (sr.name=('..')) then
          if length(sr.name)< 5 then
          if not DirectoryExists (L) then
          begin
            ForceDirectories(L);
            for I:=0 to (length(mnavn)-1) do
            begin
              K:=(drev +':\' + sr.name + '\' + s +'\' + mnavn[i] + '\');
              if not directoryexists(k) then
              ForceDirectories(k);
            end;
          end;
      end;
    end;
  end;
  showmessage('done');
end;

det er den procedure som laver mapperne. har prøvet med andre kommandoer til at lave mapper også :-) hvad er det der for en GetLastError den har jeg ikke benyttet før?
Avatar billede tolderlund Nybegynder
22. august 2003 - 21:12 #6
Du må undskylde, men jeg synes at det er noget mystisk kode du har lavet.
Der er nogle fejl i det:
1. Du bruger FindFirst/FindNext uden at bruge FindClose. En dødssynd.
2. Sådan som du har skrevet dit loop bruger du FindFirst og umiddelbart efter kalder du FindNext, så den første fil/mappe du finder med FindFirst skipper du simpelthen. Her ligger dit problem måske.
3. Et normalt FindFirst/FindNext/FindClose loop bør se sådan her ud:
    if FindFirst(drev + ':' + '\*.*', faAnyFile, sr) = 0 then
      try
        repeat
          if (sr.Name <> '.') and (sr.Name <> '..') then
            { gør noget med sr her }
        until FindNext(sr) <> 0;
      finally
        FindClose(sr);
      end;
Avatar billede beorn Nybegynder
25. august 2003 - 14:43 #7
den kan godt være du har ret i det.. tja må ærligt indrømme at det er længe siden jeg har programmeret sidst og jo det er blevet noget rodet noget :-)især efter at jeg begyndte at rode rundt i det da det ikke virkede på netværksdrevene :-) men prøver lige at rydde op i koden og sætte en findclose ind og se hvad der så sker!
Avatar billede beorn Nybegynder
25. august 2003 - 15:39 #8
procedure TForm1.LavMappe(mappenavn : string);
var
sr : Tsearchrec ;
s,k,l : string;
I : integer;
begin
s:= mappenavn;
  if FindFirst(drev + ':' + '\*.*', faAnyFile, sr) = 0 then
    try
      repeat
        if (sr.Name <> '.') and (sr.Name <> '..') then
          begin
            if (sr.Attr = 48) then
              begin
                L :=(drev +':\' + sr.name + '\' +s) ;
                if length(sr.name)< 5 then
                  if not DirectoryExists (L) then
                    begin
                      MkDir(L);
                      L := '';
                        for I:=0 to (length(mnavn)-1) do
                          begin
                            K:=(drev +':\' + sr.name + '\' + s +'\' + mnavn[i]);
                            if not directoryexists(k) then
                            MkDir(k);
                            K := '';
                          end;
                      end;
              end;
          end;
        until FindNext(sr) <> 0;
      finally
        FindClose(sr);
      end;
end;

nu ser den sådan her ud. stadig samme fejl. Var nødt til at ændre attributten til '48' eftersom netværks drevet åbenbart har en anden directory attribut end et lokalt drev. fandt dog også ud af at jeg at enkelte af mapperne havde et problem med at give administrator adgang til oprettelse af nye mapper. men det var bare at give hovedmappen nye rettigheder så opdaterede den selv de få som der var problemer med. men nu arbejder jeg lidt videre med det selv. tak for hjælpen alle.
Avatar billede tolderlund Nybegynder
25. august 2003 - 16:16 #9
Det du laver med 48 er en fejl.
16 = faDirectory
32 = faArchive (arkiv attribut sat)
Der kan være andre atributter sat.
Du bør skrive
  if (sr.Attr and faDirectory) > 0 then
    {vi har et bibliotek}
Avatar billede beorn Nybegynder
02. september 2003 - 16:52 #10
tja det kan godt være det er en fejl, men det virker :-) men jeg har rettet det til noget andet og mere korrekt :-D
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