Announcement

Collapse
No announcement yet.

Dateien kopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dateien kopieren

    Hallo zusammen,
    wie kann ich am einfachsten Dateien z.B. von CD Rom auf die HDD in ein bestimmtes Verzeichniss kopieren. Die vorhandenen Dateien sollten ohne Nachfrage überschrieben werden.
    Danke und Gruß
    Karl-Heinz

  • #2
    Hi Karl-Heinz,

    wenn Du in der IDE einfach mal COPYFILE hinschreibst, den Cursor draufstellst und F1 drückst siehst Du folgendes:
    (Die zu übergebenden Pfade und Dateinemen musst Du in PChar() einschliessen!)

    BOOL CopyFile(

    LPCTSTR lpExistingFileName, // pointer to name of an existing file
    LPCTSTR lpNewFileName, // pointer to filename to copy to
    BOOL bFailIfExists // flag for operation if file exists
    );


    Parameters

    lpExistingFileName

    Points to a null-terminated string that specifies the name of an existing file.

    lpNewFileName

    Points to a null-terminated string that specifies the name of the new file.

    bFailIfExists

    Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.

    ;-)

    cu Michae

    Comment


    • #3
      ok, vielen Dank.
      das Programm wird von CD aufgerufen. Auch die zu kopierenden Dateien liegen auf CD. Muß ich zum Kopieren den Laufwerksbuchstaben angeben ? Wenn ja, wie ?
      Gruß
      Karl-Hein

      Comment


      • #4
        Hi,
        mit extractfilepath(application.exename) bekommst die die aktuelle Position deines laufenden Programmes heraus.

        cu Michae

        Comment


        • #5
          Hallo noch einmal,
          hmmm, etwas stimmt hier nicht!
          path:=extractfilepath('Update.exe');
          CopyFile(PChar(path+'\Version.dat'),PCHar('C:\Prog ramme\Test\'),true);
          Es sollte die Datei Version.dat ind das Testverzeichniss kopiert werden. Wo liegt der Fehler?
          Danke und Gruß
          K-

          Comment


          • #6
            Hi Karl-Heinz,
            extractfilepath(application.exename);
            wie oben musst Du das schreiben! in "application.exename" ist der Dateiname UND der komplette Pfad Deiner Anwendung enthalten, extrahiert wird der Pfad (incl. Laufwerkbuchstabe!);

            Probier mal folgendes:

            showmessage( extractfilepath(application.exename));

            cu Michae

            Comment


            • #7
              Hi Karl-Heinz,
              extractfilepath extrahiert aus einem Dateiname das Verzeichnis.
              Beispiel:
              path := extractfilepath('c:\verzeichnis\update.exe');
              path ist nun: 'c:\verzeichnis\'
              im Falle von
              path := extractfilepath('Update.exe');
              ist path nun ein leerer String, da keine Verzeichnisinformationen enthalten sind.
              Aus diesem Grund hat Michael auch ausdrücklich auf Application.Exename hingewiesen.
              Wenn deine EXE 'c:\verzeichnis\update.exe' heisst, so liefert
              Application.Exename eben 'c:\verzeichnis\update.exe' und ExtractFilePath(Application.Exename) 'c:\verzeichnis\' zurück.
              Damit würde dein Befehl lauten:
              <CODE>
              CopyFile(
              PChar(ExtractFilePath(Application.ExeName) + 'version.dat'),
              PChar('C:\Programme\Test\version.dat'),
              True);
              </CODE>
              Fran

              Comment


              • #8
                Hallo noch einmal,
                ich habe jetzt die Update.exe und die zu kopierenden Dateien getrennt. Schon geht es nicht mehr.
                CopyFile(PChar(ExtractFilePath(Application.ExeName )+'\Daten\Version.dat'),PChar('C:\Programme\Test\V ersion.dat'),False);
                Wo liegt der Fehler ?
                Danke und Gruß
                Karl-Hein

                Comment


                • #9
                  Moin,
                  .
                  zur Sicherheit kontrolliere ich immer mit "IncludeTrailingBackslash" auf den Backslash. Scheinbar hast Du ihn doppelt drin!

                  <code>
                  CopyFile(PChar(ExtractFilePath(Application.ExeName ) + 'Daten\Version.dat'),
                  PChar('C:\Programme\Test\Version.dat'), False);
                  </code>
                  Gruß
                  Michae

                  Comment


                  • #10
                    Jepe, IncludeTrailingBackslash ist lebenswichtig, wenn ein Anwender die Anwendung mal im Root laufen lässt:<p>
                    ExtractFilePath('C:\test.dat') ergibt C:\<br>
                    ExtractFilePath('C:\dir\test.dat') ergibt C:\dir<p>
                    Mari
                    Schöne Grüße, Mario

                    Comment


                    • #11
                      Jooh, da meine Anwendung von CD (Root) gestartet wird, habe ich den BS wohl doppelt.

                      Noch eine Frage:
                      ich habe mehrere Copy... Befehle hintereinander. Am Ende steht ein MessageDlg...
                      Kann es sein, dass das Programm schneller ist als die Daten kopiert werden?
                      Form2.show;
                      CopyFile...
                      10x
                      Form2.close,
                      MessageDlg...
                      In Form2 habe ich ein Label" Kopiervorgang läuft..."
                      Das Form2 wird aber gar nicht angezeigt, es kommt relativ schnell das MessageDlg und der Kooiervorgang hängt nach.
                      Kann ich das ändern?
                      Danke

                      Comment


                      • #12
                        Hi Karl-Heinz,
                        setzte mal hinter "Form2.show;" folgendes:
                        application.processmessages;

                        Dadurch wird der restlichen Applikation Zeit verschaft, um unter anderem Objekte neu zu zeichnen.

                        cu Michae

                        Comment


                        • #13
                          Hi Michael,
                          super Tipps, soweit läuft alles wie ich es mir dachte. Vielen Dank! Aber...
                          Warum wird aus einer Datei, wenn sie dann gebrannt ist, eine schreibgeschützte Datei ? Kann ich das verhindern ?
                          cu
                          K-

                          Comment


                          • #14
                            Hi Karl-Heinz,
                            das eine gebrannte Datei schreibgeschützt ist, liegt in der Natur des Mediums *lol*
                            Du meinst, warum eine Datei immer noch schreibgeschützt ist, nachdem Du diese auf die Platte kopiert hast?
                            Naja, bei XP klappt das glaube ich automatisch. Bei W2K werden die Attribute der Dateien unverändert übernommen, d.h. -> schreibgeschützt.
                            Du musst also die Dateiattribute neu setzen.

                            cu Michae

                            Comment


                            • #15
                              Hi Michael,
                              nach dem Kopieren der Dateien wollte ich aus meiner Anwendung auf CD den Schreibschutz aufheben mit:
                              Attributes :=FileGetAttr('C:\Test\Version.dat');
                              FileSetAttr ('C:\Test\Version.dat',attributes and not sysutils.faReadOnly);
                              Das geht nicht von CD. Wenn ich die Anwendung auf Platte im Ordner Test laufen lasse, geht es.
                              Attributes :=FileGetAttr('Version.dat');
                              FileSetAttr ('Version.dat',attributes and not sysutils.faReadOnly);
                              Waruuuum

                              Comment

                              Working...
                              X