AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Wo ist hier der Fehler beim kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wo ist hier der Fehler beim kopieren

Ein Thema von Popov · begonnen am 19. Sep 2012 · letzter Beitrag vom 19. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2      
Popov
(Gast)

n/a Beiträge
 
#1

Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 12:49
Also das hier funktioniert nicht

Delphi-Quellcode:
  Result := Result and CopyFile(PChar(SourceFile), PChar(DestFile), True);
{}
das dagegen ja
Delphi-Quellcode:
  CopyFile(PChar(SourceFile), PChar(DestFile), True);
{}
Nur sehe ich den Fehler auf den ersten Blick nicht.

Der Sinn des ersten Codes ist, dass ich eine Menge von Dateien kopiere und wissen will ob alle kopiert wurden. Nach meiner Logik müßte es funktionieren.

Bei der Gelegenheit vielleicht noch eine Nebenfrage: in der OH steht, das wenn ich bei CopyFile False als dritten Parameter eingebe, die Datei einfach überschrieben wird. Nun steht da, dass bei True ein Fehler erzeugt wird. Nun verstehe ich nicht was mit Fehler gemeint ist. Ist damit der Rückgabewert gemeint? Haben Parameter True und False gleiche Rückgabewerte, verhalten sich nur anderes beim kopieren, oder sind auch die Rückgabewerte unterschiedlich. Oder was ist mit Fehler erzeugen gemeint?

Geändert von Popov (19. Sep 2012 um 12:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 12:57
wenn result = False ist wird dein CopyFile nicht mehr durchgeführt.

Kan über den Compilerschalter "Boolsche Ausdrücke vollständig" erzwungen werden (Dürfte aber dann an vielen anderen Stellen krachen die sich auf die nicht vollständige Auswertung verlasse).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 12:57
1000

Ist result denn auch ein Boolean?
und was heißt "funktioniert nicht"? Auf den ersten Blick scheint da alles in Ordnung zu sein.

Gruß
K-H

P.S.
wenn result=false wird abgebrochen? wo ist da das If ?
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (19. Sep 2012 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 13:03
Es braucht kein If, da in der Standardeinstellung das Result ja bereits feststeht, bevor es zum CopyFile kommt. So sollte aber das Gewünschte erreicht werden:
Delphi-Quellcode:
Result := true;
...
if not CopyFile(PChar(SourceFile), PChar(DestFile), True) then
  Result := false;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 13:13
Das mit dem Auswerten der boolischen Ausdrücke kann man auch partiell (zeilen-/befehlsweise) umstellen.

Aber dann schon eher so:
Result := CopyFile(PChar(SourceFile), PChar(DestFile), True) and Result;

Nja, warum es nicht geht: Frag mal deinen Debugger ... der weiß das.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 13:47
@Bernhard Geyer

Dass Delphi es nicht weiter verfolgt wenn das Ergebnis klar steht, weiß ich, nur bisher dachte ich, dass es nur für IF Abfragen gilt.

Trotzdem erscheint es mir unlogisch, denn dann klappt keine Opperation wie x := y and z, wenn y False ist.


@p80286

"funktioniert nicht" bedeutet, dass es nicht kopiert wird.


@DeddyH

if not CopyFile(PChar(SourceFile), PChar(DestFile), True) then Result := false;

ergibt aber nur das Resultat des einen Vorgangs. Hier will ich aber mehrere Vorgänge kombinieren


@himitsu

Result := CopyFile(PChar(SourceFile), PChar(DestFile), True) and Result;

klappt leider auch nicht.


Letztendlich kriege ichd as schon hin, nur wird es dann nicht so schön aussehen in einer Zeile.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 13:51
Sind die Zieldateien bereits vorhanden? In dem Fall wäre klar, wieso nicht kopiert wird. Allerdings bin ich nicht sicher, ob ich überhaupt verstanden habe, was Du erreichen willst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#8

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 13:53
Wenn Dein Problem nur darin liegt, daß Delphi normalerweise keine Complete-Boolean-Evaluation macht, dann dreh es doch einfach um.

Statt:

Delphi-Quellcode:
  Result := Result and CopyFile(PChar(SourceFile), PChar(DestFile), True);
{}
verwende:
Delphi-Quellcode:
  Result := CopyFile(PChar(SourceFile), PChar(DestFile), True) and Result;
{}
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 13:58
@Bernhard Geyer

Dass Delphi es nicht weiter verfolgt wenn das Ergebnis klar steht, weiß ich, nur bisher dachte ich, dass es nur für IF Abfragen gilt.

Trotzdem erscheint es mir unlogisch, denn dann klappt keine Opperation wie x := y and z, wenn y False ist.
Was erwartest du denn, welchen Wert x annimmt, wenn y false ist?
Wenn y false ist, kann dieses false durch ein nachgeschaltetes "and" nicht mehr verändert werden. Also wird die Verarbeitung hier abgebrochen und das false an x übergeben.
Was ist daran unlogisch?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#10

AW: Wo ist hier der Fehler beim kopieren

  Alt 19. Sep 2012, 14:24
@Trotzdem erscheint es mir unlogisch, denn dann klappt keine Opperation wie x := y and z, wenn y False ist.
Wieso?
Wenn Y False ist, dann kann Z sein was es will, bei AND kommt dann immer nur FALSE bei raus, also kann man da auch gleich aufhören und mu nicht weitergucken.
Dabei ist es natürlich egal, ob das Ergebnis dieser Auswertung als Parameter verwendet, an eine Variable zugewiesen oder in einem IF/CASE verwendet wird.

Und nein das wird natürlich bei sämtlichen booleanischen Auswertungen so gemacht.
Wäre ja sonst ein inkonsistentes Verhalten, wenn es nicht so wäre.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz