Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:07 Der er 26 kommentarer og
1 løsning

Kopiere Filer

Hejza allesammen.

Skal bruge en kode som kopiere en nogen filer af en mappe til en anden.Her er snakke om filer på 100 kb.

Kan nogen hjælpe mig med det?

På forhånd Tak .
Avatar billede arne_v Ekspert
25. september 2004 - 21:12 #1
Vil du kopiere en enkelt fil eller vil du kopiere alle filer
i en mappe ?

Og på hvilken platform ? (windows/linux)
Avatar billede arne_v Ekspert
25. september 2004 - 21:20 #3
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/copyfileex.asp

var nok nemmere, men hvis det er alle filer skal der en løkke omkring
Avatar billede bertelbrander Novice
25. september 2004 - 21:21 #4
Du kan se hvilken filer der er i mappen med (stadig windows):

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/copyfileex.asp
Avatar billede arne_v Ekspert
25. september 2004 - 21:24 #6
Du ville formentlig linke til Find*.

Eksempel:

#include <stdio.h>

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("\\dir\\*.*",&data);
  if(h!=INVALID_HANDLE_VALUE) {
    // process data.cFileName
    while(FindNextFile(h,&data)) {
        // process data.cFileName
    }
  }
  FindClose(h);
  return 0;
}
Avatar billede bertelbrander Novice
25. september 2004 - 21:26 #7
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:27 #8
Hejza igen.
JEg er først lige begyndt på c++ så har ikke så meget kendskab til det :( .
Det er en windows maskine, og det skal være alle filerne i en mappe.
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:33 #9
det link med med copyfile siger ikke mig så meget.. Kan du måske forklarer mig lidt ?
Avatar billede arne_v Ekspert
25. september 2004 - 21:37 #10
Komplet eksempel:

#include <stdio.h>

#include <windows.h>

void copy(char*fnm, char *fradir, char*tildir)
{
  char fullfra[MAX_PATH],fulltil[MAX_PATH];
  if(fnm[0]!='.')
  {
      sprintf(fullfra,"%s%s",fradir,fnm);
      sprintf(fulltil,"%s%s",tildir,fnm);
      CopyFile(fullfra,fulltil,0);
  }
}

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("C:\\fradir\\*.*",&data);
  if(h!=INVALID_HANDLE_VALUE) {
    copy(data.cFileName,"C:\\fradir\\","C:\\tildir\\");
    while(FindNextFile(h,&data)) {
        copy(data.cFileName,"C:\\fradir\\","C:\\tildir\\");
    }
  }
  FindClose(h);
  return 0;
}
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:41 #11
sejt.. takker.. må jeg spørger om to til mere ?
Avatar billede arne_v Ekspert
25. september 2004 - 21:42 #12
selvfølgelig
Avatar billede bertelbrander Novice
25. september 2004 - 21:42 #13
Man kunne checke om den har fundet en mappe inden man forsøger at kopiere:

if(!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  ItsNotaFolder()
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:44 #14
Hvis den skulle finde en mappe ud fra en streng ville det blive:
copy(data.cFileName,fra,til");
Ikke ?

Jeg tror jeg vil komme ud for et problem, hvor brugeren ikke har adgang til mappe1. Hvad gør man så? Kan man bare lave en tilladelse på mappen ?
Avatar billede arne_v Ekspert
25. september 2004 - 21:45 #15
bertel>

Det var nok smart at teste på om det er en fil (i.s.f. mit primitive '.' test).
Avatar billede arne_v Ekspert
25. september 2004 - 21:47 #16
rasmus>

Der er en SetFileAttributes funktion (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/setfileattributes.asp)
som vil kunne løse readonly problemer på FAT32.

Men decideret bruger adgang på NTFS vil kræve noget mere.
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:51 #17
det er fat32 ...

Noget ala..:
        if (!(dwAttrs & FILE_ATTRIBUTE_READONLY))
        {
            SetFileAttributes(szNewPath,
                dwAttrs | FILE_ATTRIBUTE_READONLY);
        }
      }
      else
      {
        printf("Could not copy file.\n");
        return;
      }
Men kan bare ikke helt finde ud af at sætte det ind mit script :( .. .

Skal jeg forhøje pointsne for det
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 21:53 #18
giver fejl :
#include <stdio.h>

#include <windows.h>

void copy(char*fnm, char *fradir, char*tildir)
{
  char fullfra[MAX_PATH],fulltil[MAX_PATH];
  if(fnm[0]!='.')
  {
      sprintf(fullfra,"%s%s",fradir,fnm);
      sprintf(fulltil,"%s%s",tildir,fnm);
      CopyFile(fullfra,fulltil,0);
  }
}

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("C:\\tester\\mappe1\\*.*",&data);
  if(h!=INVALID_HANDLE_VALUE) {
        dwAttrs = GetFileAttributes(data.cFileName);
        SetFileAttributes(szNewPath,
                dwAttrs | FILE_ATTRIBUTE_READONLY);
    copy(data.cFileName,"C:\\tester\\mappe1\\","C:\\tester\\mappe1\\");
    while(FindNextFile(h,&data)) {
        copy(data.cFileName,"C:\\tester\\mappe1\\","C:\\tester\\mappe2\\");
    }
  }
  FindClose(h);
  return 0;
}
Avatar billede arne_v Ekspert
25. september 2004 - 22:14 #19
Hvad er det du vil ændre protection på ?

Det er jo ligegyldigt om mappe1 er readonly eller ej.

[der er nogle syntax fejl i koden, men ingen grund til at rette dem førend
vi ved om linierne skal bruges]
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 22:24 #20
Bruger1 har ikke adgang til at se administratorens filer.
Derfor skal der ændres et eller andet, så man kan kopirer dem.
Avatar billede arne_v Ekspert
25. september 2004 - 22:43 #21
Hvis brugeren ikke har adgang til filerne så kan de ikke kopieres. Punktum.

Men det kan man slet ikke under FAT32.
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 22:51 #22
kan man hellere ikke hvis jeg nu har passwordet til administrator brugeren ?
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 22:52 #23
ups jeg har adgang til dem... sorry
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 22:53 #24
Svar og pointsne er dine..
Avatar billede arne_v Ekspert
25. september 2004 - 22:56 #25
svar

(Bertel skulle egentligt også have haft, men han plejer ikke at ville have)
Avatar billede rasmus-madsen Nybegynder
25. september 2004 - 22:58 #26
bertel vil du også have ?
Avatar billede bertelbrander Novice
25. september 2004 - 23:06 #27
Nej tak.
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