2010-08-16 3 views
2

Je suis en train de copier un fichier d'un endroit à un autre en utilisant SHFileOperation:SHFileOperation crée le répertoire vide au lieu du fichier

SHFILEOPSTRUCT fileop; 
fileop.hwnd = 0; 
fileop.wFunc = FO_COPY; 
fileop.pFrom = L"C:\\SomeDirectory\\SomeName.jpg\0"; 
fileop.pTo = L"C:\\SomeOtherDirectory\\SomeName.jpg\0"; 
fileop.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT; 
fileop.fAnyOperationsAborted = FALSE; 
fileop.hNameMappings = 0; 
fileop.lpszProgressTitle = 0; 
SHFileOperation(&fileop); 

Le problème est que, au lieu d'obtenir une copie de SomeName.jpg dans SomeOtherDirectory un vide répertoire avec le nom SomeOtherDirectory \ SomeName.jpg est créé, des indices?

Répondre

1

Pour FO_COPY et FO_MOVE opérations membre pTo du SHFILEOPSTRUCT doit être un endroit, à savoir un répertoire, et non un nom de fichier de destination. Le répertoire est autorisé à ne pas exister, auquel cas il est créé même s'il ressemble à un nom de fichier. Vous devez simplement spécifier "C:\\SomeOtherDiretory\0" ou utiliser FO_RENAME.

Pour savoir pourquoi votre fichier n'est pas créé, avez-vous vérifié la valeur de retour?

+0

Mais MSDN (http://msdn.microsoft.com/en-us/library/bb759795%28VS.85%29.aspx) indique que «pTo» est * Un pointeur vers le nom du fichier de destination ou du répertoire *. – Naveen

+0

@Naveen: vous devez également lire la documentation de 'wFunc' pour voir comment elle est utilisée. –

+0

Non, cela ne fonctionne pas non plus. Si un dossier est spécifié comme destination, rien ne se passe pour ces fichiers, ils sont soit transformés en dossiers ou ignorés par SHFileOperation. Le bug ne se produit que pour certains fichiers. Je le contourne comme ceci: 'if (! CopyFile (...)) SHFileOperation (...);' – GrayFace

Questions connexes