Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Ściąganie plików z internetu - problm.
anonim




Typ: Nie zarejestrowany
Ściąganie plików z internetu - problm.

Znalazłem na tej stronie program ściągajązy pliki z internetu. Używa on takiej funkcji:
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, _
    LocalFilename As String) As Boolean
    Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
MsgBox ("Download = " & lngRetVal)
    If lngRetVal = 0 Then DownloadFile = True
End Function


Mam taki problem że chcę cześto ściągać ten sam plik który często się zmienia.
Ta funkcja tak naprawde tylko raz ściąga plik. Ten jest zapisywany na dysku tam gdzie mu każe i np. w Temporary Internet Files. Gdy chcę drugi raz ściągnąć ten plik funkcja nie sprawdza czy ten nie uległ zmianie i "ściąga" mi przestarzały plik.
Jeśli wcześniej skasuje pliki w folderze TIF to wszystko działa poprawnie. Nie moge ręcznie kasować Tymczasowych plików zawsze przed uruchomieniem tej funkcji. Prubowalem przed uruchomieniem tej funkcji czegoś takiego:
Kill C:\WINDOWS\Temporary Internet Files\moj_plik.txt
Ale to niedziala (nie znajduje tego pliku)

Może ktoś wie jak rozwiązać ten problem?

18-11-2003 20:35
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
działa..

Działa, działa, tylko:
- przed skasowaniem sprawdź, czy istnieje,
- ścieżkę dostepu podawaj w "", bo do środka tych funkcji niezbędny jest typ danych - string.

If Dir("Kill C:WINDOWSTemporary Internet Filesmoj_plik.txt" <> "" Then _
Kill "C:WINDOWSTemporary Internet Filesmoj_plik.txt"

Funkcja Dir zwraca "", jeśli nie znajduje określongo pliku lub katalogu.

[Post edytowany dnia 19-11-2003 23:41 przez losmac]


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

19-11-2003 23:40
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
anonim




Typ: Nie zarejestrowany

Nie w tym problem że wyskakuje błąd gdy chce skasować plik którego nie ma. Z tym sobie poradziłem .
Problem w tym że programy napisane w VB "niewidzą" plików w filderze Temporary Internet Files. I nie mogą ich skasować.
Tak samo z pod wiersza poleceń lub DOSa też nie ma dostępu do tych plików. Są jakoś tak ukryte.
Można je ręcznie, przy użyciu myszki wyrzucić do kosza lub w Opcjach internetowych skasować pliki tymczasowe.
A ja potrzebuje żeby albo mój program to robił albo ta funkcja ściągająca plik powinna sprawdzać czy ten się niezmienił od ostatniego czasu.

20-11-2003 19:07
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
spróbuj tego...

Podaję Ci jak odczytać datę utworzenia i ostatniej modyfikacji pliku. Nie testowałem tego na sieci, ale na lokalnym komputerze chodzi bez zarzutów. Po odczytaniu daty modyfikacji już będziesz wiedział co robić.
Odpowiednio zmodyfukuj procedurkę testową, tak, by zwracała Ci odpowiednie informacje.


Option Explicit

Declare Function GetFileTime Lib "kernel32.dll" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Declare Function FileTimeToLocalFileTime Lib "kernel32.dll" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function FileTimeToSystemTime Lib "kernel32.dll" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Dim hFile As Long  ' wskaźnik do otwieranego pliku
Dim ctime As FILETIME  ' data utworzenia
Dim atime As FILETIME  ' data ostatniego dostępu
Dim mtime As FILETIME  ' data oststniej modyfikacji
Dim thetime As SYSTEMTIME  ' do manipulacji czasem
Dim retval As Long  ' zwracana wartość

Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_ALWAYS = 2
Const CREATE_NEW = 1
Const OPEN_ALWAYS = 4
Const OPEN_EXISTING = 3
Const TRUNCATE_EXISTING = 5
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Const FILE_FLAG_NO_BUFFERING = &H20000000
Const FILE_FLAG_OVERLAPPED = &H40000000
Const FILE_FLAG_POSIX_SEMANTICS = &H1000000
Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Const FILE_FLAG_WRITE_THROUGH = &H80000000
'niezbędne struktury
Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type

Type SYSTEMTIME
  wYear As Integer
  wMonth As Integer
  wDayOfWeek As Integer
  wDay As Integer
  wHour As Integer
  wMinute As Integer
  wSecond As Integer
  wMilliseconds As Integer
End Type

Sub CzytajCzasPliku()

' Najpierw, otwórz plik do odczytu, by pobrać wskaźnik do niego. 0 (zero) jako lpSecurityAttributes.
hFile = CreateFile("sciezka do pliku", GENERIC_READ, FILE_SHARE_READ, ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
If hFile = -1 Then
  MsgBox "Nie mogłem otworzyć pliku!" & vbCr & vbCr & _
        "Anulowanie odczytu...", vbExclamation, "Błąd"
  Exit Sub  ' zakończ program
End If

' Teraz, pobierz datę utworzenia, ostatniego wejścia i czas ostatniej modyfikacji.
retval = GetFileTime(hFile, ctime, atime, mtime)
' konwertuj czas do lokalnej strefy czasowej
retval = FileTimeToLocalFileTime(ctime, ctime)
' konwertuj czas do formatu SYSTEMTIME
retval = FileTimeToSystemTime(ctime, thetime)

    'wyświetl datę utworzenia
    MsgBox "Plik został utworzony: " & thetime.wDay & "-" & thetime.wMonth & "-" & thetime.wYear

' konwertuj czas do lokalnej strefy czasowej
retval = FileTimeToLocalFileTime(mtime, ctime)
' konwertuj czas do formatu SYSTEMTIME
retval = FileTimeToSystemTime(mtime, thetime)


    'wyświetl datę zmodyfikowania
    MsgBox "Plik został zmodyfikowany: " & thetime.wDay & "-" & thetime.wMonth & "-" & thetime.wYear

' zabij wskaźnik.
retval = CloseHandle(hFile)

End Sub



[Post edytowany dnia 20-11-2003 21:59 przez losmac]


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

20-11-2003 21:56
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Wszystkich odpowiedzi: 3 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1