Come determinare se una cartella è condivisa

Talvolta quando si creano degli applicativi che devono lavorare in background senza l’intervento dell’utente, è bene prevedere qualsiasi anomalia senza però segnalare con un alert (magari su un server) la situazione anomala e comunque senza mandare in crash l’intera applicazione per una condizione non verificatasi.

Tempo addietro mi capitò sviluppando una procedura batch che un sistema generava dei files e che questi dovevano essere trasferiti in una cartella condivisa sul server per cui mi serviva un metodo per capire se effettivamente tale cartella era condivisa o meno.

Il codice che segue mi ha aiutato nella risoluzione del problema:

Type SHFILEINFO
 hIcon As Long
 iIcon As Long
 dwAttributes As Long
 szDisplayName As String * MAX_PATH
 szTypeName As String * 80
End Type

Public Const SHGFI_ATTRIBUTES = &H800
Public Const SFGAO_SHARE = &H20000
Public Declare Function SHGetFileInfo Lib  "shell32.dll" Alias "SHGetFileInfoA" _
 (ByVal pszPath As String, ByVal swFileAttributes As Long, _
 psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long

Public Function IsSharedThisFolder(ByVal Path As String) As Boolean
 Dim sfi As SHFILEINFO

 SHGetFileInfo Path, 0, sfi, Len(sfi), SHGFI_ATTRIBUTES
 IsSharedThisFolder=(sfi.dwAttributes And SFGAO_SHARE)
End Function