Erreur lors de l'utilisation de la fonction CopyFile

Bonjour, je suis en utilisant le CopyFile fonction dans Delphi 5. Mais le fichier n'est pas copié à destination. Je ne suis pas en mesure de voir l'erreur aussi. Quelle est la meilleure façon de savoir pourquoi CopyFile est défectueux?

if CopyFile(source, dest, false) then
  ShowMessage('Success')
else
  ShowMessage('Error');

Je suis d'erreur affiché toujours. 🙁

  • Vous devriez être en utilisant pchar (CopyFile(pchar(sourcefile), pchar(destfile), false). Pour vérifier si des copies de fichiers, utilisez FileExists(destfile).. Vous pouvez envelopper votre CopyFile dans un try/except et de répondre à l'exception...
  • C'est tout à fait vrai, mais cela n'aide pas à identifier le code d'erreur.
  • Primaire des modes de défaillance: 1. La Source n'existe pas 2. Dest chemin d'accès n'existe pas 3. Dest fichier en lecture seule 4. Les autorisations d'erreur.
  • Par exemple, en essayant de remplacer un fichier qui est actuellement ouvert (donc verrouillé)
  • Le casting de PChar n'est pas nécessaire dans la plupart des cas (comme ce qui semble être indiqué ici). Habituellement, elle ne s'applique que lorsque Delphi ne peut pas automatiquement la conversion, comme lorsque vous combinez une variable et une constante (par exemple., SourcePath + 'SomeFile.txt').
  • Je vous remercie. CopyFile paramètres (dans d2010) sont PWideChar. Est-ce la mauvaise programmation de la pratique pour correspondre à des types de paramètres?
  • Cette question a été sur le D5/7 (pré-Unicode), où les paramètres sont PChar (le même que PAnsiChar), et CopyFile est en fait CopyFileA sous le capot. N'a pas d'importance, si - D2010, string est en Unicode, et Delphi encore auto-convertir si possible sans le transtypage, comme ci-dessus; dans D2010, CopyFile est en fait CopyFileW pour la grande chaîne de version. L'auto-conversion Delphi n'est similaire à la façon dont il vous permet de déposer la ^ de l'opérateur lors de l'accès à des instances de classe (qui sont des pointeurs) ou les enregistrements comme TPoint, de sorte que vous pouvez utiliser Form1. au lieu de Form1^.
  • Merci pour l'explication, Ken!

InformationsquelleAutor Nalu | 2012-08-09