Mazanie súboru do koša   otázka

VB6/VBA

Našiel som na nete kód pre VB6 pomocou ktorého by malo ísť mazať súbory do koša ( recycle bin )

Private Type SHFILEOPTSTRUCT
  hWnd As Long
  wFunc As Long
  pFrom As String
  pTo As String
  fFlags As Integer
  fAnyOperationsAborted As Long
  hNameMappings As Long
  lpszProgressTitle As Long
End Type

Private Declare Function SHFileOperation Lib "Shell32.dll" _
  Alias "SHFileOperationA" (lpFileOp As SHFILEOPTSTRUCT) As Long
  
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40

Public Sub DeleteFileToRecycleBin(Filename As String)

'filename = napr. "c:\temp\test.txt"

Dim fop As SHFILEOPTSTRUCT

With fop
  .wFunc = FO_DELETE
  .pFrom = Filename
  .fFlags = FOF_ALLOWUNDO
End With

SHFileOperation fop

End Sub

Program mi však skončí s chybou 453. V API sa veľmi nevyznám, nevedel by niekto zistiť v čom môže byť problém ? Za pomoc vopred ďakujem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Popis chybových kódů Win32 API naleznete zde:

http://msdn.microsoft.com/en-us/library/...

Kód 453 jsem tam ale nenašel, což je divné. Zkusil bych tedy použít funkci FormatMessage, která vrací popis chybového kódu:

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém nebude v kódu, ale v knihovně Shell32.dll

Chyba 453 je "Specified DLL function not found"

Knihovna neexistuje (nebo není zaregistrována, nebo je poškozená?).

Kód je napsaný pro VB6 a předpokládám spouštění ve VB6.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Presný názov chyby - RUN-TIME error '453' : Can't find DLL entry point SHFILEOperationA in Shell32.dll

Predpokladám, že shell32.dll by mal byť na každom počítači štandardne. Takmer úplne rovnaký príklad na mazanie súborov do koša som našiel aj priamo na stránkach Microsoftu pre VB6, aj tento kód hlási rovnakú chybu. Skúsim to ešte vyskúšať na iných počítačoch prípadne aj na Win ME.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyskúšal som to na viacerých počítačoch aj na XP aj na 98ME stále hlási rovnakú chybu.

Na

http://support.microsoft.com/kb/154005

je vzorový príklad ten takisto nefunguje a hlási rovnakú chybu.

Nie som odborník na API neviem či robím niečo zle ja, alebo v čom môže byť problém...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chybu v kódu nevidím, tak je chyba v knihovně. Přeinstaluj knihovnu shell32.dll (zkontroluj servis pack 6 pro vb6)

Nejdřív zkus:

regsvr32 \windows\system32\shell32.dll (ale tím to by být nemělo nefungovaly by ti windows - tzn. asi máš starou knihovnu)

Pro jistotu 100% funkční kód vyzkoušený - ve vb6 sp6, win XP sp3

V modulu:


Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As Long
End Type


Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long


Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_NOCONFIRMATION = &H10 ' Odpověď ANO pokud chci nastavi Ano pro všechny
Private Const FOF_SILENT = &H4    ' Nezobrazovat progress


'Přesune soubor do koše
Public Sub SendFileToRecycleBin(FileName As String, Optional Confirm As Boolean = True, Optional Silent As Boolean = False)
    Dim FileOp As SHFILEOPSTRUCT


    With FileOp
        .wFunc = FO_DELETE
        .pFrom = FileName
        .fFlags = FOF_ALLOWUNDO
        If Not Confirm Then .fFlags = .fFlags + FOF_NOCONFIRMATION
        If Silent Then .fFlags = .fFlags + FOF_SILENT
    End With
    SHFileOperation FileOp
    
    
End Sub

Volání ve formu

Private Sub Command1_Click()
SendFileToRecycleBin "c:\posilamtedokose.txt", False
MsgBox "Ok"

End Sub
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ďakujem Vyskúšam

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak som to vyskúšal, stále mi to hlási rovnakú chybu ako je uvedené hore. Chyba vzniká na riadku

SHFileOperation FileOp

Tak som založil nový čistý projekt vložil som tam uvedený kód a tam to funguje bez problémov mazané súbory sú v koši !!!

Čiže chyba je niekde inde nie priamo v tomto kóde.

Prehľadal som celý program a nikde inde sa nepoužíva

shfilopstruct ani ShfileOperation. Nepomohlo ani keď som deklarácie z formu presunul do modulu. Ako keby niečo blokovalo prístup k shell32.dll počas behu môjho programu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback