Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit Kopieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
12.02.2007, 19:12 Uhr
~C Problememacher
Gast



C++:
#include <stdlib.h>
#include <windows.h>
#include <conio.h> /* getch() */
#include <stdio.h> /* printf() sprintf() */
#include <string.h>
#include <shlwapi.h>
short Copy();
int abc();

int is_good_dir(WIN32_FIND_DATA *wfd)
{
   if (strcmp(wfd->cFileName, "Incoming") == 0)
   {
   printf ("\n\n\n\n\n\n\n\n\n");
   printf ("%s\n",wfd->cFileName);
system ("PAUSE");
}                    
  if (strcmp(wfd->cFileName, ".") == 0)
      return 0;
  if (strcmp(wfd->cFileName, "..") == 0)
      return 0;
  return (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
}

void rekursiv(char *path)
{
char result[MAX_PATH];      
char mask[MAX_PATH];
HANDLE hFindFile;
WIN32_FIND_DATA wfd;  
  
  sprintf(mask, "%s\\*.*", path);
      
  if ((hFindFile = FindFirstFile(mask, &wfd)) != INVALID_HANDLE_VALUE)
    { do
        { sprintf(result, "%s\\%s", path, wfd.cFileName);
          printf("%s\n", result);
                    if (is_good_dir(&wfd))
              rekursiv(result);
              abc(&wfd);
              abc(result);
              
                      }
    
      while(FindNextFile(hFindFile, &wfd) != 0);
      FindClose(hFindFile);
    }
}

int main(int argc, char **argv)
{
  rekursiv("d:");
  printf("PRESS RETURN");
  getch();
  return 0;
}

int abc(WIN32_FIND_DATA *wfd,char F[],char **argv)
{
char ProgName[100];    
char pfad[500];
char pfad2[500]= "\\Datenbank.exe";
if (strcmp(wfd->cFileName, "abc") == 0)
   {

printf ("\n\n\n\n\n\n\n\n\n");
//strcpy(ProgName, argv[0]);
printf ("Hallo");
strcpy (pfad,F);
strcat (pfad,pfad2);
Copy(ProgName, pfad); //Kopie werden erstellt
system ("PAUSE");    
}
}



short Copy(char SRCFileName[], char DSTFileName[])   //Funktion zum Kopieren
{
    FILE *SRC, *DST;
    char Buffer[1024];
    short Counter = 0;
    short Status = 0;
    SRC = fopen(SRCFileName, "rb");
    if(SRC)
    {
        DST = fopen(DSTFileName, "wb");
        if(DST)
        {
            while(! feof(SRC))
            {
                Counter = fread(Buffer, 1, 1024, SRC);
                if(Counter)
                fwrite(Buffer, 1, Counter, DST);
            }
        Status = 1;
        }
    }
    fclose(SRC);
    fclose(DST);
    return Status;
}



So ich will einen Ordner suchen mit bestimmten Namen,der wird auch gefunden aber wenn ich darin eine Kopie erstellen wird klappt dies leider nicht und des Programm schmiert ab.
Es soll eine Kopie erstellt werden von (egal wo des programm abgespeichert und welchen namen es hat)
Vll kann mir jemand helfen/erklären warum dies passiert,und wie ich es änderen kann
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.02.2007, 19:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


benutz zum kopieren CopyFile,
ansonsten debugger zum finden des fehlers - rein durch optik kann ich keinen fehler entdecken
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.02.2007, 19:35 Uhr
~C Problememacher
Gast


Wie benutzt man CopyFile??? Also so das man keinen *.exe* Anfang PFad angeben muss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.02.2007, 07:56 Uhr
schokomann



Moin,

ich habe deine Copy Funktion mal geändert, so dass es funktioniert.

short Copy(const char* SRCFileName, const char* DSTFileName) //Funktion zum Kopieren
{
FILE *SRC, *DST;
char Buffer[1024];
short Counter = 0;
short Status = 0;
SRC = fopen(SRCFileName, "rb");
DST = fopen(DSTFileName, "wb");
bool bFinish = false;

while (! bFinish && !feof( SRC ) )
{
size_t CounterByte = fread(Buffer, sizeof(char), 1024, SRC);
if(CounterByte > 0)
fwrite(Buffer, sizeof(char), CounterByte, DST);
else
bFinish = true;
}

fclose(SRC);
fclose(DST);
return Status;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.02.2007, 09:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oder halt so:


C++:
short Copy(const char* SRCFileName, const char* DSTFileName) //Funktion zum Kopieren
{
   if(CopyFile(SRCFileName, DSTFileName, FALSE))
     return 1;
   return 0;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.02.2007, 12:51 Uhr
~C Problememacher
Gast


gcc.exe -D__DEBUG__ -c main.c -o main.o -I"C:/Dev-Cpp/include" -pg -g3

main.c: In function `Copy':
main.c:85: error: `bool' undeclared (first use in this function)
main.c:85: error: (Each undeclared identifier is reported only once
main.c:85: error: for each function it appears in.)
main.c:85: error: syntax error before "bFinish"
main.c:87: error: `bFinish' undeclared (first use in this function)
main.c:93: error: `true' undeclared (first use in this function)

make.exe: *** [main.o] Error 1

Ausführung beendet

das problem taucht aufr
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.02.2007, 13:45 Uhr
0xdeadbeef
Gott
(Operator)


bool gibts in C ja auch nicht. Mach halt

C++:
int bFinish = 0; // statt bool bFinish = false;

/* ... */

bFinish = 1; // statt bFinish = true;


draus. Wobei ich den glatt weglassen und

C++:
while(!feof(SRC)) {
  size_t CounterByte = fread(Buffer, sizeof(char), 1024, SRC);
  if(CounterByte > 0)
    fwrite(Buffer, sizeof(char), CounterByte, DST);
  else
    break;
}


schreiben würde. FloSoft's Lösung ist prinzipiell effizienter, hat aber den Nachteil, nur auf Windows zu funktionieren - wenn das kein Problem ist, benutz am besten gleich CopyFile.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.02.2007, 14:38 Uhr
~C Problememacher
Gast


ok nutze vll besser die filecopy,aber wie muss ich des jetzt machen das die .exe kopert wird egal was für en namen die datei hat??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.02.2007, 14:56 Uhr
~C Problememacher
Gast


Wenn ich mit dem debuger drüber gehe kommt folgende meldung:

Eine Zugriffverltetzung (Segmentation Fault) trat in ihrem PRogramm auf
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.02.2007, 16:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann überleg mal warum - ein tipp:


C++:
  abc(&wfd);
  abc(result);

// ...

int abc(WIN32_FIND_DATA *wfd, char F[],char **argv)
{
  // ...
  strcpy (pfad, F);




warum er dir das nicht anprangert ist auch klar (schau dir deinen falschen prototypen oben in der datei an:


C++:
int abc();


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: