timotep
Messages postés34Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention16 janvier 2008
-
21 nov. 2007 à 17:51
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 2009
-
29 janv. 2008 à 10:57
Bonjour, j'ai le problème suivant, sur un de mes programmes, et pour
lequel je n'ai trouvé aucune solution, n'ayant pas trouvé pourquoi ça
coince :
Le programme me permet d'aller chercher sur un serveur Ftp une liste de
fichiers, et de récupérer les noms (ça c'est ok), mais ausside
récupérer la dernière date de modification (là, ça se corse, et c'est
là que mon programme plante) :
Voici quelques lignes de mon code :
Public Sub ListerFichiers(ByRef RepServeur As String)
J'ai le message d'erreur suivant : erreur Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
Or, je ne sais pas quoi faire pour résoudre cette erreur.
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 21 nov. 2007 à 22:02
Bonsoir,
Cela vient certainement de ta signature de la fonction FileTimeToLocalFileTime.
Comment l'as-tu écrite ?
Si tu regardes sur MSDN elle attend 2 structures FILETIME, donc en VB.Net je passe mes structures par référence ByRef et non par valeur ByVal comme ceci:
Public Declare Function FileTimeToLocalFileTime Lib "kernel32.dll" (ByRef lpFileTime as FILETIME, ByRef lpLocalFileTime as FILETIME) as Boolean
Profite pour vérifier la signature de FileTimeToSystemTime et la déclaration de la structure FILETIME également
timotep
Messages postés34Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention16 janvier 2008 22 nov. 2007 à 11:14
Rebonjour,
Merci à toi, tu as bien vu, c'était exactement mon problème :
1) changer les paramètres en les assant par ref et non par valeur :
Public Declare Function FileTimeToLocalFileTime Lib "kernel32" (ByRef lpFileTime As FILETIME, ByRef lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (ByRef lpFileTime As FILETIME, ByRef lpSystemTime As SYSTEMTIME) As Long
2) Changer le type de mes variables dans ma structure FILETIME :
Public Structure SYSTEMTIME
Dim wYear As Short
Dim wMonth As Short
Dim wDayOfWeek As Short
Dim wDay As Short
Dim wHour As Short
Dim wMinute As Short
Dim wSecond As Short
Dim wMilliseconds As Short
End Structure
Ainsi, avec le code que j'ai mis au-dessus, ça fonctionne. Merci beaucoup, tu m'as enlevé une bonne épine du pied, je n'aurais pas pensé à cette erreur sans cela, d'autant que de très nombreux codes sont en exemple, mais en VB6 la plupart du temps. je vais retourner à mon prog sereinement
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 29 janv. 2008 à 10:57
Bonjour
Depuis hier, je cherche sur Internet un code qui me permettrait de récupérer la date des fichiers qui se trouvent sur mon serveur FTP. Après plusieurs heures de recherches, essais, ... toujours rien.
J'ai pû constituer le code ci-dessous et il semble bien que je retrouve le fichier. En effet, la valeur de hFind (que j'ai mis en gras / bleu) est différente de zéro. Je présume que le fichier est donc bien retrouvé. Toutefois, wfd ne me retourne que des valeurs vides (pour les strings) et des zéros (pour les long). Argggh.
Pourriez-vous m'aider ?
Mon souhait : récupérer la date de création des fichiers sur mon FTP de telle manière que je puisse faire un FTPGet et ensuite, réinitialiser la date des fichiers en local.
MERCI....
' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic
' The ScriptMain class is the entry point of the Script Task.
Option Strict Off
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
' Must have System.Net to use FtpWebRequest
Imports System.Net
' Must have System.IO to use StreamReader
Imports System.IO
Public Structure FILETIME
Dim dwLowDateTime As Long
Dim dwHighDateTime As Long
End Structure
Public Structure SYSTEMTIME
Dim wYear As Short
Dim wMonth As Short
Dim wDayOfWeek As Short
Dim wDay As Short
Dim wHour As Short
Dim wMinute As Short
Dim wSecond As Short
Dim wMilliseconds As Short
End Structure
Public Structure WIN32_FIND_DATA
Dim dwFileAttributes As Long
Dim ftCreationTime As FILETIME
Dim ftLastAccessTime As FILETIME
Dim ftLastWriteTime As FILETIME
Dim nFileSizeHigh As Long
Dim nFileSizeLow As Long
Dim dwReserved0 As Long
Dim dwReserved1 As Long
<VBFixedString(260)> Public cFileName As String
<VBFixedString(14)> Public cAlternate As String
End Structure
Public Class ScriptMain
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal HINet As Integer) As Integer
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, _
ByVal sProxyName As String, ByVal sProxyBypass As String, _
ByVal lFlags As Integer) As Integer
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Integer, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Integer, _
ByVal lFlags As Integer, _
ByVal lContext As Integer) As Integer
Private Declare Auto Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByRef hFtpSession As Long, ByRef lpszSearchFile As String, _
ByRef lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long
Public Declare Function FileTimeToLocalFileTime Lib "kernel32" (ByRef lpFileTime As FILETIME, ByRef lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (ByRef lpFileTime As FILETIME, ByRef lpSystemTime As SYSTEMTIME) As Long
' The execution engine calls this method when the task executes.
' To access the object model, use the Dts object. Connections, variables, events,
' and logging features are available as static members of the Dts class.
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
'
' To open Code and Text Editor Help, press F1.
' To open Object Browser, press Ctrl+Alt+J.
Public Sub Main()
Dim host As String = Dts.Variables("sFTPServerName").Value.ToString
Dim username As String = Dts.Variables("sFTPLogin").Value.ToString
Dim password As String = Dts.Variables("sFTPPassword").Value.ToString
Dim sFTPRootFolder As String = Dts.Variables("sFTPRootFolder").Value.ToString
Dim dwHighDateTime As Long
Dim dwLowDateTime As Long
Dim hFind As Long
Dim nFlag As Long
Dim ft As FILETIME
Dim wfd As WIN32_FIND_DATA
dwHighDateTime = 29777492
dwLowDateTime = 1503098368
Dim INet, INetConn As Integer
Dim RC As Boolean
INet = InternetOpen("HR_Reporting_SAPFULLDATA", 1, vbNullString, vbNullString, 0)
INetConn = InternetConnect(INet, host, 0, username, password, 1, nFlag, 0)
hFind = FtpFindFirstFile(INetConn, sFTPRootFolder & "ZPC2.txt", wfd, 0, 0)
InternetCloseHandle(INetConn)
MsgBox("hFind " & hFind)
MsgBox("cFileName : " & wfd.cFileName)
MsgBox("cAlternate : " & wfd.cAlternate)
InternetCloseHandle(INet)
Dts.TaskResult = Dts.Results.Success
End Sub
End Class