2012-04-10 2 views
-2

J'ai une petite application qui essaie de déplacer des fichiers.C++ MoveFile erreur (2) sur Windows 7

Voici le code min:

#include <windows.h> 

int main() 
{ 
    MoveFile("C:\\test.txt", "C:\\folder\\test.txt"); 
    // Here I use GetLastError() to get last error code witch is 2 and I can't find what mean; 

    return 0; 
} 

IMPORTANT: Cette erreur apparaît sur Windows 7, mais sur la victoire XP fonctionne, le fichier est déplacé!

+1

Ma supposition 'C: \ folder' n'existe pas ou' C: \ test.txt' n'existe pas. Sous Windows 7, vous auriez besoin des droits d'administrateur pour écrire réellement sur 'C: \', donc juste parce que vous voyez un 'test.txt' dans Explorer, cela ne signifie pas qu'il est réellement dans cet emplacement. Mais je ne sais pas si 'MoveFile' est conscient de ce mécanisme de magasin virtuel par utilisateur ... – 0xC0000022L

Répondre

5

Vous pouvez trouver tous les codes d'erreur on MSDN ou dans vos fichiers d'en-tête. Ce qui signifie que votre fichier source est introuvable lorsque vous avez essayé Windows 7. Assurez-vous d'avoir le bon chemin relatif/absolu dans ce fichier.

+0

Ops, j'avais un mauvais chemin. Ok maintenant je viens de recevoir le code d'erreur 5 qui signifie "ERROR_ACCESS_DENIED". Le fichier que j'essaie de déplacer n'est pas utilisé par un autre processus. – kanevbgbe

+2

Windows 7 a différents privilèges pour les utilisateurs admin. Vérifiez votre UAC. Faites des recherches par vous-même. –

+0

@ daffr32: lisez mon commentaire à votre question. Bien sûr, vous recevrez 5, parce que sur Windows 7 (et Vista) les règles ont changé, par rapport à XP. Exécutez le programme en tant qu'administrateur ou utilisez simplement un emplacement pour tester votre programme qui n'est pas affecté par les problèmes d'autorisation, tels que% USERPROFILE% \ Desktop ... – 0xC0000022L

1

Votre exemple a une faute de frappe. Il vous manque une barre oblique inverse sur votre nom de fichier de destination. Windows génère généralement l'erreur 2 dans ce cas

+0

C'était une erreur d'écriture manuscrite. – kanevbgbe