Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur dans fonction FileTimeToLocalFileTime [ Windows / API ] (timotep)

mercredi 21 novembre 2007 à 17:51:57 | Erreur dans fonction FileTimeToLocalFileTime

timotep

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)

Dim pData As WIN32_FIND_DATA
Dim essai As String
Dim i As Integer = 0
Dim lRet As Integer
Dim hFind As Integer

pData.cFileName = New String(Chr(0), 260)
hFind = FtpFindFirstFile(LhConnection, RepServeur, pData, 0, 0)
If hFind = 0 Then Exit Sub
Do
   pData.cFileName = New String(Chr(0), 260)
   lRet = InternetFindNextFile(hFind, pData)
   If lRet = 0 Then Exit Do
   If not (pData.dwFileAttributes And FileAttribute.Directory) = FileAttribute.Directory   Then
     'stockage des noms des fichiers dans un tableau :
     listeFichiersWeb(i, 0) = Left(pData.cFileName, InStr(pData.cFileName, Chr(0)) - 1)
     'Là, c'est la ligne qui va permettre de convertir la date
     ' c'est ma fonction "FileTimeToDate" qui pose problème (voir ci-dessous la fonction)
     essai = FileTimeToDate(pData.ftLastWriteTime)
     'Pour le débugage, je me suis contenté d'afficher le résultat, mais mon prog bloque     avant de toute façon :
     MsgBox(essai)
End If
i += 1
Loop
InternetCloseHandle(hFind)

End Sub

'La fonction qui déconne :
Private Function FileTimeToDate(ByVal ft As FILETIME) As Date

Dim datelocale As FILETIME, datesys As SYSTEMTIME

' LA LIGNE QUI COINCE DANS MON PROGRAMME :
If FileTimeToLocalFileTime(ft, datelocale) = 0 Then Exit Function
If FileTimeToSystemTime(datelocale, datesys) = 0 Then Exit Function
FileTimeToDate = CDate(datesys.wDay & " " & datesys.wMonth & " " & datesys.wYear & " " & _
datesys.wHour & ":" & datesys.wMinute & ":" & datesys.wSecond)

End Function


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.

mercredi 21 novembre 2007 à 22:02:20 | Re : Erreur dans fonction FileTimeToLocalFileTime

Willi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
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

++

jeudi 22 novembre 2007 à 11:14:13 | PROBLEME RESOLU

timotep

Réponse acceptée !
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

mardi 29 janvier 2008 à 10:57:21 | Re : Erreur dans fonction FileTimeToLocalFileTime

cavo789

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....


[CODE]
' 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

[/CODE]

Christophe



Cette discussion est classé dans : fonction, erreur, pdata, datesys, if


Répondre à ce message

Sujets en rapport avec ce message

Liste des codes d'erruers [ par xavier77 ] salut à tous.........J'aimerai savoir s'il existe un moyen de retrouver la description d'une erreur en fonction de son code car une fois un projet com Recupérer le nom de la fonction en cours [ par pisko ] Salut,Tout est dans le titre...Je suis en train de developper une petite gestion d'erreur.Pour reussi a savoir d'ou vient l'erreur je recupere le nom Sortir d'une fonction a partir d'une autre [ par pioug43 ] J'aimerais pouvoir sortir d'une boucle infini en envoyant soit un mess d'erreur soit toute autre solution qui me permettrai de quitter la boucle a par Sortir d'une erreur ... [ par BarthOlivier ] Bonjour,J'utilise la fonction ReadFile pour lire sur un peripherique externe. Le problème c'est que s'il se passe un problème lors de la communication Erreur très bizarre sous Excel [ par pulley60 ] Bonjour à tous.Voila je travail sur une appli Excel que je redéveloppe sous VB. L'appli excel avait ete developpé sous Excel 95 et lors du passage à E gestion d'erreurs [ par mourad183 ] voila ma fonctionprivate sub fonction()on erreur goto a ......nombreentier=caractere......goto ba:endb:end sublogiquement le programme va s'arreter si La fonction Date [ par energizer956956 ] Bonjour,alors voila mon problème est le suivant : j'ai créé une fonction qui utilise la fonction date, mais lorsque je lance cette fonction je reçoit Prob ListBox Access [ par ozar ] Bonjour à tous,J'ai un listebox contenant des valeurs, lorsque je clic sur le listbox, j'affiche le détail. Tout ce passe bien ...Maintenant quand je Apel de fonction [ par Ulmo ] Salut, est ce que quelqu'un pourrait m'expliquer ce qui me donne l'erreur dans ce code suivant : Module Module1     Sub Main()         Dim Objet As Function: Pb de parametre [ par atoguum4ever ] aTomicK Bonjour, J'ai recuperer une partie de code sur le site et j'ai un probleme pour ajouter un parametre dans une


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,998 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.