![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
Hallo alle miteinander!
Ich möchte gerne eine SD-Karte im Kartenleser automatisch einlesen. Mein Problem ist, dass der Laufwerksbuchstabe zwar vorhanden ist, es aber zur Fehlermeldung kommt wenn keine SD-Karte vorhanden ist (Fehler: Kein Datenträger im Laufwerk – Abbruch/Wiederholen)... Mit „Set("ERRORLEVEL",-1)“ und „DirExists("D:\")“ funktioniert es leider nicht. Gibt er hier eine Möglichkeit zu überprüfen ob eine SD-Karte vorhanden ist, ohne dass es zur Fehlermeldung kommt? LG Jens |
|
|
|
|
|
|
#2 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Teste mal den Code, müsste funktionieren.
Code:
Proc CheckDrive
Parameters lw$
Declare result&,lw#
If len(lw$) = 1
lw$=lw$ + ":\\"
ELSEIF len(lw$) = 2
lw$=lw$ + "\\"
ELSEIF len(lw$) > 3
lw$ = left$(lw$,3)
ENDIF
Dim lw#,8
String lw#,0=lw$
Let result&=External("KERNEL32","GetVolumeInformationA",lw#,0,0,0,0,0,0,0)
dispose lw#
Return result&
EndProc
cls
Print checkDrive("A")
waitinput
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#3 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
Hallo Bangkok!
Danke für die schnelle Antwort und für den Code. Der Code funktioniert super, ist genau das was ich gesucht habe... Zum Code habe ich noch mal eine Frage. Du verwendest hier „GetVolumeInformationA“, währe es mit dem Code auch möglich die Laufwerksbezeichnung/Namen heraus zu bekommen? Wenn ja, was müsste ich hier ändern? LG Jens |
|
|
|
|
|
#4 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Das kannst du wie folgt machen. liefert Lw-Namen und Seriennummer zurück. Nicht jedes LW hat eine Seriennummer, die wird von Windows vergeben.
Code:
$H windows.ph
Proc GetDriveinfo
Parameters Drive$
Declare serial$
Declare VolumeName#, VolumeSerial#
Dim VolumeName#, 260 : Dim VolumeSerial#, 4
~GetVolumeInformation(Addr(Drive$), VolumeName#, 260, VolumeSerial#, 0, 0, 0, 0)
drive$ = STRING$(volumename#,0)
serial$ = Hex$(Word(VolumeSerial#, 2, 2) & $FFFF) + "-"+ Hex$(Word(VolumeSerial#, 0, 2) & $FFFF)
Dispose VolumeName#, VolumeSerial#
Return serial$+"|"+drive$
EndProc
Print GetDriveinfo("c:\")
Waitinput
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Hab dafür auch einen Code:
Code:
'
' (c) Frabbing für Paules-PC-Forum:
' http://www.paules-pc-forum.de/forum/xprofan/
'
Declare mem#, typ$, name$
Dim mem#,280
Cls
Var text$ = Space$(1024)
External("kernel32.dll", "GetLogicalDriveStringsA", 1023, Addr(text$))
Whileloop 1, 256
typ$ = Trim$(SubStr$(text$, &loop, "\z"))
Case typ$ = "": BREAK
Clear mem#
External("kernel32","GetVolumeInformationA", Addr(typ$), mem#, 280,0,0,0,0,0,0)
name$ = String$(mem#, 0)
If name$<>""
Print "Laufwerk: " + typ$, "-> Name: " + name$
Else
Print "Laufwerk: " + typ$
EndIf
EndWhile
WaitInput
Dispose mem#
End
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (29.03.2011 um 10:43 Uhr) |
|
|
|
|
|
|
#6 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
Hallo alle miteinander!
@ Bangkok Noch mal Danke für den Code, auch der funktioniert wunderbar. @ Frank Auch Dein Code funktioniert, aber er zeigt auch Infos an die nicht existieren. Hier mal ein Bild davon: Laufwerk A, C und D stimmen. Bei Laufwerk E, F, G, H, I und J liegen keine Medien drin (CD, SD-Karte), es werden hier die Namen vom letzten Laufwerk (D) übernommen. LG Jens |
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Ein vergessenes Clear an der passenden Stelle bewirkt da wahre Wunder, Jens. Hab meinen Code angepasst.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#8 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
@ Frank
Jo, alles bestens, jetzt funktioniert es wie gewollt... Danke... Bei der Gelegenheit hätte ich mal noch eine Frage zum erstellen eines Inhaltsverzeichnis. Mit „FindFirst$("*.*")“ und „FindNext$()“ kann ich ja ein Laufwerk durchsuchen. Hier werden mir dann zwar auch Verzeichnisse angezeigt, aber sie werden nicht automatisch durchsucht. Muss ich nun wirklich jedes Verzeichnis einzeln öffnen und erneut FindFirst$("*.*") und FindNext$() ausführen, oder gibt es da vielleicht noch eine „Anwender freundlichere“ Lösung um ein Verzeichnisbaum zu erstellen? LG Jens |
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Leider nicht wirklich. Was du suchst ist eine rekursive Datei/Verzeichnissuche. Z.B. sowas:
Code:
'Rekursive Suche nach Dateien
'aufgeschrieben von Thomas Glockmann unter Mithilfe
'von David Strutz und Frank Abbing
Def FindFirstFile(2) !"kernel32","FindFirstFileA"
Def FindNextFile(2) !"kernel32","FindNextFileA"
Def FindClose(1) !"kernel32","FindClose"
Struct WIN32_FIND_DATA=dwFileAttributes&,ftCreationTime#(8),ftLastAccessTime#(8),\
ftLastWriteTime#(8),nFileSizeHigh&,nFileSizeLow&,dwReserved0&,dwReserved1&,\
cFileName#(260),cAlternate#(14)
Declare Pos&
Declare HandleA&[]
Declare HandleA$[]
Declare Verz&
Declare Datei&
Declare FH&
Declare FindData#
Declare PM$
Dim FindData#, Win32_Find_Data
Declare Pfad$
Declare Maske$
Proc DateiListe
'Parameters Pfad$,Maske$
PM$ = Pfad$ + "\\" + Maske$
FH& = FindFirstFile(Addr(PM$),FindData#)
While (Pos& >= 1) And (FH& >= 0) = 1
Repeat
If (@String$(FindData#,44) <> ".") And (@String$(FindData#,44) <> "..")
If (FindData#.dwFileAttributes& & $10) = $10
Inc Verz&
HandleA&[Pos&] = FH&
HandleA$[Pos&] = Pfad$
Pfad$ = Pfad$ + "\\" + @String$(FindData#,44)
Print #1, Pos&, Verz&, Datei&
Print Pfad$
Print #1, Pfad$
Inc Pos&
'Dateiliste(Pfad$,Maske$)
Dateiliste
Else
Inc Datei&
Print @String$(FindData#,44)
Print #1, Pos&, Verz&, Datei&
Print #1, Pfad$ + "\\" + @String$(FindData#,44)
EndIf
EndIf
Until FindNextFile(FH&,FindData#) = 0
Dec Pos&
If Pos& >= 1
FH& = HandleA&[Pos&]
Pfad$ = HandleA$[Pos&]
Case FindNextFile(FH&,FindData#) = 0 : Break
Else
Break
EndIf
EndWhile
EndProc
Pos& = 1
Assign #1, "C:\\Dateien.txt"
ReWrite #1
Cls
Print "Suche..."
'DateiListe("C:","*")
Pfad$ = "C:"
Maske$ = "*"
Dateiliste
FindClose(FH&)
Close #1
CLs
Print "Verzeichnisse:", Verz&, "Dateien:", Datei&
WaitInput
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#10 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Mit FindFirst musst du tatsächlich in alle Unterverzeichnisse gehen. Du könntest
AddFiles *"*.*" versuchen. Damit werden auch alle Unterverzeichnisse durchsucht.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
|
#11 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Ja, mußt dann aber nochmal die Liste durchackern.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#12 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
@ Frank
Oh ha, da habe ich ja voll ins Hornissennest gestochen. Der Code funktioniert zwar, aber ich verstehe da nur Bahnhof. Den Code werde ich daher nicht verwenden können, da steige ich absolut nicht durch... @ Bangkok Jo, so etwas in der Richtung währe optimal, wenn man es gleich in eine Datei schreiben könnte (ohne ListBox). Ich glaube ich werde den Weg zu Fuß gehen müssen, ist aber auch nicht weiter tragisch... LG Jens |
|
|
|
|
|
#13 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Kann ich gut verstehen, Jens. Ist auch nicht unbedingt mein Fall, Prozeduren innerhalb sich selbst aufzurufen, wie es der Code macht.
Wenn du Dieters Methode wählst: Die ShlWapi.dll bietet elegante und einfache Methoden, Pfadnamen korrekt aufzudröseln und vielleicht eine gute Gelegenheit, in die API-Programmierung einzusteigen oder sie zu vertiefen. Nur Mut. Gute Nacht.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#14 (Direktlink) | |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
Zitat:
Danke noch mal für Eure Hilfe, ich werde das Problem schon irgendwie lösen... LG Jens |
|
|
|
|
|
|
#15 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 20.02.2009
Alter: 39
Beiträge: 71
|
Hallo alle miteinander!
Ich habe meine Routine für die Datei/Verzeichnis suche fertig gestellt. Anbei ist der Code dazu (für den Fall dass ihn jemand gebrauchen kann)... Inhalt: * Datei und Verzeichnissuche * Es kann mit und ohne Unterverzeichnisse gesucht werden * Es wird eine Inhaltsverzeichnisdatei (mit Datum und Zeit) erstellt * Anzahl gefundener Verzeichnisse und Dateien wird mitgezählt Falls Fehler auftauchen sollten, bitte melden... LG Jens Code:
' ' Dateien und Verzeichnisse suchen ' erstellt für Paules-PC-Forum: ' XProfan - Paules-PC-Forum.de ' Author: Jens Gürtler ' '---------------------------------------------------------------------------------- ' GLOBALE VARIABELN '---------------------------------------------------------------------------------- Declare UntVer$ ' Unterverzeichnisse Declare VerZahl% ' Zähler für gefundene Verzeichnisse Declare DatZahl% ' Zähler für gefundene Dateien Var LogDatei$ = "C:\\" ' Pfad der Inhaltsverzeichnisdatei '---------------------------------------------------------------------------------- ' UNTERPROGRAMME '---------------------------------------------------------------------------------- Proc Datei_erstellen Var DE_Open$ = "Fehler" ' mit Fehler vorladen Var DE_Name$ = Date$(0) + "-" + Time$(0) + ":" + SUBSTR$(Time$(1),1,".") ' Dateiname erstellen DE_Name$ = Translate$(DE_Name$,":","-") ' Doppelpunkt durch Strich ersetzen DE_Name$ = Translate$(DE_Name$,".","-") ' Punkt durch Strich ersetzen CaseNot Right$(LogDatei$,1) = "\" : LogDatei$ = LogDatei$ + "\\" ' wenn "\" nicht vorhanden, dann anhängen DE_Name$ = LogDatei$ + DE_Name$ + ".log" ' Verzeichnis & Endung anhängen Assign #1,DE_Name$ ' Dateiname zuweisen Rewrite #1 ' Datei erstellen IfNot %IOResult ' wenn erstellen OK, dann... DE_Open$ = "OK" ' Flag setzen - Datei offen Print #1,"***** Kopfzeile *****" ' Kopfzeile erstellen Else ' wenn erstellen fehlgeschlagen ist, dann... Close #1 ' Datei schließen EndIf Return DE_Open$ ' Übergabe ob Datei offen ist (OK = offen) EndProc '---------------------------------------------------------------------------------- Proc Suche_auswerten Parameters SA_Pfad$, SA_gefunden$ ' Übergabe Pfad & Datei/Verzeichnis If (InStr("[",SA_gefunden$) = 1) AND (InStr("]",SA_gefunden$) = Len(SA_gefunden$)) ' wenn Verzeichnis gefunden, dann... IfNot Right$(SA_gefunden$,2) = ".]" ' wenn ".]" nicht vorkommt, dann... SA_gefunden$ = Ins$(SA_Pfad$,SA_gefunden$,2) ' Pfad mit einfügen SA_gefunden$ = Del$(SA_gefunden$,1,1) ' Zeichen "[" löschen SA_gefunden$ = Del$(SA_gefunden$,Len(SA_gefunden$),1) ' Zeichen "]" löschen UntVer$ = UntVer$ + Chr$(13) + SA_gefunden$ ' Unterverzeichnis speichern Inc VerZahl% ' gefundene Verzeichnisse mit zählen ' gefundene Verzeichnisse verarbeiten Print SA_gefunden$ + "\\" ' Anzeigen im Hauptfenster Print #1,SA_gefunden$ + "\\" ' in Datei schreiben EndIf ElseIf Len(SA_gefunden$) > 1 ' wenn Daten gefunden, dann... Inc DatZahl% ' gefundene Datei mit zählen ' gefundene Datei verarbeiten Print SA_Pfad$ + SA_gefunden$ ' Anzeigen im Hauptfenster Print #1,SA_Pfad$ + SA_gefunden$ ' in Datei schreiben EndIf EndProc '---------------------------------------------------------------------------------- Proc DateiSuche Parameters DS_Pfad$, DS_UVsuche$ ' Übergabe Pfad & Unterverzeichnis Suche Var DS_Akt_Pfad$ = GetDir$("@") ' aktuellen Pfad sichern Var DS_Ende% = 0 ' While Schleife verlassen UntVer$ = "" ' Reset - alte Unterverzeichnisse löschen VerZahl% = 0 ' Reset - Verzeichnis Zähler zurücksetzen DatZahl% = 0 ' Reset - Datei Zähler zurücksetzen ' Datei erstellen Var DS_Open$ = Datei_erstellen() ' Verzeichnisdatei erstellen If DS_Open$ = "OK" ' wenn Datei erstellen erfolgreich war, dann... ' Dateien suchen WhileNot DS_Ende% ' Beginn Endlosschleife CaseNot Right$(DS_Pfad$,1) = "\" : DS_Pfad$ = DS_Pfad$ + "\\" ' wenn "\" nicht vorhanden, dann anhängen ChDir DS_Pfad$ ' Pfad einstellen Suche_auswerten(DS_Pfad$,FindFirst$("*.*")) ' UP_Suche_First(DS_Pfad$) ' Datei/Verzeichnis suchen WhileNot %IOResult ' wenn OK, dann... Suche_auswerten(DS_Pfad$,FindNext$()) ' UP_Suche_Next(DS_Pfad$) ' weitere Dateien/Verzeichnisse suchen EndWhile ' gefundene Unterverzeichnise verarbeiten If (Len(UntVer$) > 2) And (Lower$(DS_UVsuche$) = "ja") ' wenn Unterverzeichnisse existieren, dann... UntVer$ = Del$(UntVer$,1,1) ' führendes "Chr$(13)" Zeichen entfernen DS_Pfad$ = SUBSTR$(UntVer$,1,Chr$(13)) ' Verzeichnisse extrahieren - Neuse Verzeichnis einstellen UntVer$ = Del$(UntVer$,1,Len(SUBSTR$(UntVer$,1,Chr$(13)))) ' erstes Verzeichnis aus String löschen Else ' wenn keine Unterverzeichnisse gefunden wurden, dann... DS_Ende% = 1 ' While verlassen EndIf EndWhile ' Ende Endlosschleife Close #1 ' Datei schließen EndIf ' alten Pfad wieder herstellen ChDir DS_Akt_Pfad$ ' Pfad einstellen EndProc '---------------------------------------------------------------------------------- ' HAUPTPROGRAMM '---------------------------------------------------------------------------------- CLS 'DateiSuche("C:\\Windows","") ' Dateien suchen ohne Unterverzeichnisse 'DateiSuche("C:\\Windows","ja") ' Dateien suchen mit Unterverzeichnisse DateiSuche("C:\\","") ' Dateien suchen ohne Unterverzeichnisse Print "Es wurden " + Str$(VerZahl%) + " Verzeichnisse gefunden..." ' Info Text Print "Es wurden " + Str$(DatZahl%) + " Dateien gefunden..." ' Info Text waitkey |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Wechseldatenträger | nullchecker | Hardware - Problemlösungen | 4 | 12.08.2006 10:41 |
| wechseldatenträger | ^^^^ | Allgemein | 1 | 26.04.2006 19:21 |
| Stromverbrauch ermitteln | Leo | Hardware - Problemlösungen | 5 | 29.09.2005 10:52 |
| Arbeitspeicher ermitteln | rawie87 | Allgemein | 4 | 11.09.2005 10:53 |
| Wechseldatenträger. | cyberfan | Windows XP | 2 | 19.03.2004 18:41 |