[VBS] (résolu) copy overwrite fonctionne pas.. pourquoi?

copy overwrite fonctionne pas.. pourquoi? [VBS] (résolu) - VB/VBA/VBS - Programmation

Marsh Posté le 10-11-2005 à 09:28:57    

bonjour,
 
J'ai créé un script qui fait un tri lorsque des fichiers sont déposé sur un serveur FTP.
Ces fichiers ont comme particularités d'avoir un nom assez explicite:
STDannéemoi.log
 
J'ai donc fait un script qui récupère l'année du fichier puis le mois.
 
Cela donc créé donc une arborescente de cette sorte ANNEE / MOIS / fichier
 
 
Mon probleme est que ce fichier est incrémenté (c'est un fichier LOG) tous les jours et uploadé tous les jours sur mon FTP.
 
Donc tous les jours je dois trier les fichiers MAIS, je ne comprend pas pourquoi la copie n'overwrite pas le fichier de la veille.
 
Je pense que ce bout de code est mauvais mais je vois pas comment le modifier:
 

Code :
  1. StrCopy = sssmonth & "\" & objFile.FileName & "." & objFile.Extension
  2.  if Fso.Fileexists(StrCopy) then
  3.  else
  4.  objFile.Copy(StrCopy)
  5.  Set fd = fso.CreateTextFile(strcopy)
  6.  end if
  7.  objFile.Delete


 
 
avant j'avais mis ce code là et çà n'overwrite toujours pas:
 

Code :
  1. StrCopy = sssmonth & "\" & objFile.FileName & "." & objFile.Extension
  2. objFile.Copy(StrCopy)


 
Si vous voulez le reste du code, ya pas de pb... mais bon.. comme çà fonctionne.. je vois pas l'utilité de le mettre..
 
merci de votre aide!!


Message édité par rules_taff le 10-11-2005 à 14:32:50
Reply

Marsh Posté le 10-11-2005 à 09:28:57   

Reply

Marsh Posté le 10-11-2005 à 09:40:00    

sur  le site de http://www.devguru.com
 
je respecte pourtant bien la syntaxe de copy
 
Copy
Syntax: object.Copy destination[, overwrite]
This method copies the selected file to the specified destination.

Reply

Marsh Posté le 10-11-2005 à 10:14:19    

Pour qu'il ecrase le fichier précédent il faut écrire
objFile.Copy StrCopy, True


Message édité par mareek le 10-11-2005 à 10:20:37

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-11-2005 à 10:28:28    

désolé.. déjà essayé.. mais cela ne fonctionne pas!
 
et pour infos, les fichiers ne sont pas en lecture seul.
 
je bloque!

Reply

Marsh Posté le 10-11-2005 à 10:31:03    

Pour overwrite, true est optionnelle. donc pas besoin de spécifier TRUE.
 
Suis en train de voir pour faire une procédure suivant la taille du fichier présent et le nouveau...
 
P'tet quand forcant... çà passera..
 
Mais si d'autres idées vous viennent à l'esprit...
chuis preneur!

Reply

Marsh Posté le 10-11-2005 à 11:05:10    

Est-ce que ton fichier de log que tu dois écraser ne serait pas ouvert par une autre appli ? si c'est le cas, c'est normal que ça soit impossible de l'écraser.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-11-2005 à 11:11:10    

ce n'est pas le cas.

Reply

Marsh Posté le 10-11-2005 à 11:11:51    

çà t'aiderais d'avoir le code entier?

Reply

Marsh Posté le 10-11-2005 à 11:23:00    

t'as pas d'erreur quand tu copies ton fichier ?


Message édité par mareek le 10-11-2005 à 11:23:14

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-11-2005 à 11:41:18    

nan..il me dis rien... j'ai rajoute un Wscript.Echo au niveau de la boucle pour voir s'il passe bien dedans et c'est le cas! mais il n'écrase pas le fichier...
 
je continue toujours .. . . .

Reply

Marsh Posté le 10-11-2005 à 11:41:18   

Reply

Marsh Posté le 10-11-2005 à 11:46:27    

t'es sûr que tu copies le fichier au bon endroit ? parce que s'il n'y a pas d'erreur et que le fichier n'est pas écrasé c'est qu'il l'a copié ailleur


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-11-2005 à 11:52:48    

et bé alors il est copié dans le vent! parce que je le vois pas!
 
je te copie colle tout mon code et tu verras ...
 
la faut que je rebootes..


Message édité par rules_taff le 10-11-2005 à 11:53:10
Reply

Marsh Posté le 10-11-2005 à 12:01:58    

Code :
  1. '//////////////// C'est ici que l'on demande de faire un premier ////////////////////////'
  2. '////////////////////tri des fichiers dont l'extension est log///////////////////////////'
  3. strComputer = "."
  4. DIM Filemonth, Fileyeartmp,Fileyear, Filefull,Fso,nostd,stdornot,stdout
  5. set Fso = createObject("scripting.FilesystemObject" )
  6. Set objWMIService = GetObject("winmgmts:" _
  7.     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" )
  8. Set colFiles = objWMIService. _
  9. ExecQuery("Select * from CIM_DataFile where Extension = 'log' and Path = '\\ftp\\ftp\\'" )
  10. For Each objFile in colFiles
  11. Filefull= objFile.FileName    '/on duplique le nom du fichier pour le traiter dans une variable à part
  12. Filemonthnumber= right(Filefull,2)  '/on cherche à connaitre la valeur du mois ( 2 derniers chiffres du fichier)
  13. Fileyeartmp= right(Filefull,6)   '/on prend les 6 derniers numeros du fichier
  14. Fileyear= left(Fileyeartmp,4)   '/sur les 6 numeros de Fileyeartmp, on en retire le mois: ce qui nous donne l'année
  15. ddate_today=now
  16. nday = day(ddate_today)
  17. nmonth= month(ddate_today)
  18. nyear= year(ddate_today)
  19. created= "File created in BIN the year " & nyear &" and month " & nmonth &" and day "& nday
  20. '/////////////////on cherche à savoir si le fichier commence par STD////////////////////'
  21. sserveur = "c:\ftp\ftp"
  22. If left(Filefull,3) = "std"  and len(Filefull) = 9 then
  23. '//////////////////////////On indique le dossier de travail et /////////////////////////'
  24. '////////////la création du dossier de l'année en rapport avec le nom du fichier////////'
  25.  dim ssyear
  26.  ssyear = sserveur &"\"&Fileyear
  27.   If (Fso.Folderexists(Fileyear)) then
  28.   else
  29.   Fso.createFolder(Fileyear)
  30.   End if
  31. '/////////////////////On va ici modifier la variable ssmonth pour///////////////////////'
  32. '////////// la convertir de numero du mois à son écriture plus explicite ///////////////'
  33.  dim ssmonth
  34.  dim sssmonth
  35.   Select Case Filemonthnumber
  36.     Case 01     ssmonth = "01_January"
  37.           Case 02     ssmonth = "02_February"
  38.            Case 03     ssmonth = "03_March"
  39.           Case 04     ssmonth = "04_April"
  40.           Case 05     ssmonth = "05_May"
  41.           Case 06     ssmonth = "06_June"
  42.           Case 07     ssmonth = "07_July"
  43.           Case 08     ssmonth = "08_August"
  44.           Case 09     ssmonth = "09_September"
  45.           Case 10     ssmonth = "10_October"
  46.           Case 11     ssmonth = "11_November"
  47.           Case 12     ssmonth = "12_December"
  48.       End Select
  49.  sssmonth = ssyear &"\"&ssmonth
  50.   If (Fso.Folderexists(sssmonth)) then
  51.   else
  52.   Fso.createFolder(sssmonth)
  53.   End if
  54. '////////////////ici on exécute la fonction de triage//////////////'
  55. StrCopy = sssmonth & "\" & objFile.FileName & "." & objFile.Extension
  56. objFile.Copy(StrCopy)
  57. objFile.Delete
  58. '/////////ici on effectue le déplacement des fichiers non STD dans le dossier BIN///////////'
  59. else
  60. dim BIN
  61.   BIN = sserveur &"\bin"
  62.   If (Fso.Folderexists(BIN)) then
  63.   else
  64.   Fso.createFolder(BIN)
  65.   End if
  66.  StrCopy = BIN & "\" & objFile.FileName & " " & created & "." & objFile.Extension
  67.  objFile.copy(StrCopy)
  68.  objFile.Delete
  69. end if
  70. next


 
J'ai oublié de préciser un truc.. c'est mon premier script en VBS... :D  

Reply

Marsh Posté le 10-11-2005 à 13:10:24    

A la lecture: Lignes 27 et 29 remplace Fileyear par ssyear sinon le dossier ne sera pas créé dans sserver mais dans le rep du script

Reply

Marsh Posté le 10-11-2005 à 13:41:33    

merci dahlo pour cette erreur.. mais cela ne résout toujours pas mon probleme..
 

Reply

Marsh Posté le 10-11-2005 à 14:08:05    

A la vérif, la méthode copy() de la classe CIM_DataFile ne supporte pas l'écrasement d'un fichier existant :(
 

Citation :

Copy Method of the CIM_DataFile Class
The Copy method copies the logical file (or directory) that is specified in the object path to the location specified by the input parameter. A copy is not supported if it requires overwriting an existing logical file. This method is inherited from CIM_LogicalFile.


 
Remplace ligne 56: objFile.Copy(StrCopy)
par:
    Fso.CopyFile sserveur & "\" & objfile.Filename & "." & objfile.Extension, Strcopy, True

Reply

Marsh Posté le 10-11-2005 à 14:23:15    

MERCI!!!!!!
 
çà fonctionne!!!
 

Reply

Marsh Posté le 10-11-2005 à 14:25:00    

bon.. j'ai encore un truc à modifier.. et j'aurais surement encore besoin de tes precieux conseils.
 
mais je vais tout de meme essayer de chercher de mon coté...

Reply

Marsh Posté le 10-11-2005 à 14:26:27    

Qu'est qui t'a mis le doigt sur le CIM_datafile au faite?

Reply

Marsh Posté le 10-11-2005 à 14:46:43    

Par une réactivation soudaine d'un ancien neurotransmetteur et re-vérif msdn, m'étais déjà fait avoir ;)

Reply

Marsh Posté le 10-11-2005 à 14:52:46    

ok!
merci tout de meme!!!
 
j'aurais jamais pensé à vérifier çà!  comme je l'ai dis.. c'est mon premier script VB!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed