Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1232to1236
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei eindeutig identifizieren

Datei eindeutig identifizieren
norman
Hi alle,
stehe auf dem Schlauch: In VBA will ich eindeutig identifizieren, wo die XLS-Datei, die ich gerade geladen habe, liegt. Laufwerksbuchstabe hilft nicht, da das bei jedem Usern anders sein kann. Kein Problem, dann nehme ich den UNC-Pfad, dachte ich zumindest. Jetzt bekomme ich aber folgendes Problem:
Bei einem User heißt der Share, in der die Datei liegt z.B.:
\\Server1234\Testdaten\Datei.xls
Bei einem anderen User heißt der Share, über den er zugreift:
\\Server1234\AnderesShare\Datei.xls
Physikalisch ist das aber die gleiche Datei (z.B. C:\abc\efg\hij\Datei.xls). Aber es wurden zwei Shares angelegt, die in den gleichen Bereich zeigen. Wie kann ich rauskriegen, ob das die gleiche physikalische Datei ist, hier "scheinen" es ja unterschiedliche Dateien zu sein?
Grübelgrübelgrübel, bin echt für Hilfe dankbar!
Viele Grüße
Norman

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datei eindeutig identifizieren
27.10.2011 00:45:52
norman
Ui, habe was. Da muss man aber kräftig darüber nachdenken, wie jetzt eine Datei wirklich eindeutig wird: Lokaler Pfad + Servername + ein bisserl Sharename. Grrr. Falls da einer nen Tipp für mich hat, wie man das am besten machen könnte, wäre ich dankbar.
Private Type MungeLong
x As Long
Dummy As Integer
End Type
Private Type MungeInt
XLo As Integer
XHi As Integer
Dummy As Integer
End Type
Private Declare Function NetShareGetInfo Lib "NETAPI32" _
(ByRef ServerName As Byte, _
ByRef NetName As Byte, _
ByVal Level As Long, _
ByRef buffer As Long) As Long
Private Declare Function NetAPIBufferFree Lib "netapi32.dll" _
Alias "NetApiBufferFree" (bufptr As Any) As Long
Private Declare Function PtrToInt Lib "kernel32" Alias "lstrcpynW" _
(RetVal As Any, ByVal Ptr As Long, _
ByVal nCharCount As Long) As Long
Private Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyW" _
(RetVal As Byte, ByVal Ptr As Long) As Long
Private Declare Function StrLen Lib "kernel32" Alias "lstrlenW" _
(ByVal Ptr As Long) As Long

Public Function GetLocalPath(sUNCPath As String) As String
Dim sTemp As String
Dim sServer As String
Dim sShare As String
Dim baServer() As Byte
Dim baShare() As Byte
Dim Result As Long
Dim Buf As Long
Dim TempStr As MungeInt
Dim TempPtr As MungeLong
Dim STRArray(0 To 255) As Byte
Dim sBasePath As String
sTemp = Mid(sUNCPath, 3)
sServer = Left(sTemp, InStr(1, sTemp, "\") - 1)
sTemp = Mid(sTemp, InStr(1, sTemp, "\") + 1)
If InStr(1, sTemp, "\") > 0 Then
sShare = Left(sTemp, InStr(1, sTemp, "\") - 1)
sTemp = Mid(sTemp, InStr(1, sTemp, "\"))
Else
sShare = sTemp
sTemp = ""
End If
baServer = "\\" & sServer & Chr(0)
baShare = UCase(sShare) & Chr(0)
Result = NetShareGetInfo(baServer(0), baShare(0), 2, Buf)
mvarLastError = Result
If Result = 0 Then
Result = PtrToInt(TempStr.XLo, Buf + 24, 2)
Result = PtrToInt(TempStr.XHi, Buf + 26, 2)
LSet TempPtr = TempStr
Result = PtrToStr(STRArray(0), TempPtr.x)
sBasePath = Left(STRArray, StrLen(TempPtr.x))
Result = NetAPIBufferFree(Buf)
server = sServer
GetLocalPath = sBasePath & sTemp
End If
End Function

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige