2010-12-02 36 views
1

J'ai un programme qui vérifie périodiquement les nouveaux fichiers, puis les traite. Parce que je veux être sûr que le fichier n'est pas copié sur FTP, je déplace d'abord le fichier.
La chose étrange est que dans Windows Server 2008 le fichier est déplacé, même lors de la copie, et l'opération de copie FTP se termine au nouvel emplacement.FileSystemObject déplace un fichier même lorsqu'il est copié sur FTP

Comment cela est-il possible?

J'ai testé le problème, utilisez cette simple lignes de code dans un fichier VBS:

dim fso 
set fso = createobject("Scripting.FileSystemObject") 
fso.MoveFile "bigfile.zip", "moved\bigfile.zip" 

Répondre

1

Eh bien, lorsque vous déplacez un fichier (dans le même lecteur), vous ne dire le système de fichiers que le fichier peut être trouvé ailleurs, vous ne déplacez pas les données. Donc je suppose que le mouvement va de l'avant et dit au système de fichiers où le fichier peut maintenant être trouvé, mais l'opération FTP a déjà alloué de l'espace sur le disque dur pour les données réelles et donc le fait que le fichier a été déplacé, ' t affecter où les données sont stockées de quelque façon, et tout fonctionne.

Si vous déplaciez le fichier sur un autre lecteur, je supposerais que quelque chose se casserait quelque part.

Si vous avez accès au client, vous pouvez demander au client d'écrire un autre petit fichier par la suite avec le nom bigfile.zip.complete ou similaire, et votre application serveur pourrait attendre cela avant de commencer le traitement, de cette façon vous serez sûr que la copie est terminée (cela fonctionnerait également au cas où la connexion serait interrompue à mi-chemin et que le client arrête de télécharger le fichier même s'il n'est pas terminé).

Ou si vous n'avez pas accès au client, peut-être que vous pourriez essayer de regarder la taille du fichier, si elle n'a pas changé en tant que secondes ou minutes, alors il est espéré fini.

+0

J'ai déjà résolu le problème en essayant d'ouvrir le fichier en écriture. Mais juste courageux pourquoi l'OS l'a permis –

+0

C'est une situation parfaitement normale sous unixes – lispmachine