2010-02-24 7 views
4

J'ai utilisé CopyFileEx depuis le début des temps et cela a fonctionné très bien. Si le fichier n'est pas verrouillé, il copiera le fichier. Si le fichier est verrouillé, il ne le sera pas et GetLastError signalera l'erreur. Tout va bien et dandy. Toutefois, certains fichiers sont partiellement verrouillés, les fichiers Outlook PST en étant le meilleur exemple. Dans ce cas, CopyFileEx commence à copier, et quand il frappe la partie du fichier qui est verrouillé, il se bloque et ne revient jamais (sur Windows 7, peut-être aussi sur d'autres systèmes).CopyFileEx et les fichiers partiellement verrouillés

Est-il possible d'éviter ce problème?

+1

Je suppose que vous ne considéreriez pas "Expongez Outlook de tous vos systèmes" une bonne réponse? :-) –

+0

Problème similaire ici; uniquement lorsque le code .Net est appelé via IO.Copy, le fichier résultant est supprimé. –

+0

Je suis coincé avec le même problème CopyFileEx se bloque sur Windows 7, ne peut pas voir une raison pourquoi? Le rappel n'est même pas appelé et l'appelant n'est pas revenu de CopyFileEx;) –

Répondre

2

Il existe un moyen de l'éviter, mais il n'y a pas de solution facile. Veuillez voir mon answer here.

+0

Oui, je connais et j'utilise VSC via l'API, mais ma question concerne une copie directe. – Lobuno

+0

Les pilotes de fichiers ouverts que j'ai mentionnés peuvent faire ce travail pour vous. Et l'autre partie de ma réponse qui s'applique est qu'il n'y a pas de moyen facile d'utiliser ces pilotes. –

+0

@Lobuno: Vous pouvez coder votre propre pilote de filtre de système de fichiers, mais c'est probablement hors de la portée de vos besoins et probablement d'un projet pluriannuel. –

2

Vous pouvez effectuer vous-même la copie en commençant par appeler le LockFileEx. Il a un drapeau à échouer immédiatement s'il ne peut pas verrouiller ce que vous lui avez demandé.

Questions connexes