 | Bestimmen, in welchem Verzeichnis das TAP arbeitet |  |
Verfasst am: So 01. Mai 2005, 21:19 |
|
|
Trridy |
Benutzer |

|
|
Anmeldungsdatum: 11.04.2005 |
Beiträge: 39 |
|
|
|
|
 |
 |
 |
|
Hi,
Habe in der TAPI Doku keine Info darüber gefunden, wie ein TAP das
"current working directory" feststellen kann. Gibt's da eine Lösung zu
(eventuell über attr von TYPE_File)?
Danke, Trridy |
|
|
|
|
Verfasst am: Di 03. Mai 2005, 10:33 |
|
|
Trridy |
Benutzer |

|
|
Anmeldungsdatum: 11.04.2005 |
Beiträge: 39 |
|
|
|
|
 |
 |
 |
|
Hallo,
Gibt es wirklich keinen, der dazu was sagen kann? Mir wäre auch
schon geholfen, wenn wer sagen würde: "Nein, geht nicht". Dann muß ich
mich eben um andere Alternativen umschauen.
Kommt schon, Forumisten. Laßt mich nicht hängen.
Bye, Trridy |
|
|
|
|
Verfasst am: Di 03. Mai 2005, 10:42 |
|
|
Gerti |
Team topfield.de |

 |
|
Anmeldungsdatum: 07.01.2003 |
Beiträge: 4552 |
Wohnort: Bielefeld |
|
|
|
 |
 |
 |
|
Hi!
Soweit ich weiss kannst Du das nicht feststellen...
Du musst Dich von der obersten Ebene "hinabarbeiten"...
Gruß,
Gerti |
|
_________________ ImproBox V1.4 - Mehr als eine Alternative zum Original...
Topfield TF5000PVR
im Black Panther Gehäuse mit VF Display - Firmware 5.11.88 vom 10. Juni
05 - Samsung SV1604N - Astra / Hotbird - 100cm Gibertini-Schüssel -
Humax-LNBs - Ankaro 9/4 Multiswitch - ImproBox - SmartEPG - Nice
Display - PBK - Screensaver |
|
|
|
 | |  |
Verfasst am: Di 03. Mai 2005, 10:43 |
|
|
Lucky B |
TAP-Guru |

|
|
Anmeldungsdatum: 03.05.2004 |
Beiträge: 197 |
|
|
|
|
 |
 |
 |
|
Trridy hat folgendes geschrieben:: | Hallo,
Gibt es wirklich keinen, der dazu was sagen kann? Mir wäre auch schon
geholfen, wenn wer sagen würde: "Nein, geht nicht". Dann muß ich mich
eben um andere Alternativen umschauen.
Kommt schon, Forumisten. Laßt mich nicht hängen.
Bye, Trridy |
Hi Trridy,
damit Du wenigstens mal eine Antwort hast, schreib ich halt mal was
Also bis jetzt hab ich sowas noch nicht benötigt, deshalb hab ich auch keine Ahnung ob das geht oder nicht
Aber ich kann heute abend mal checken ob ich was finde.
grüße
Lucky B
EDIT: Ups Gerti war schneller  |
|
|
|
|
 | |  |
Verfasst am: Di 03. Mai 2005, 13:54 |
|
|
Trridy |
Benutzer |

|
|
Anmeldungsdatum: 11.04.2005 |
Beiträge: 39 |
|
|
|
|
 |
 |
 |
|
Hi,
Danke für die Infos. Dann weiß ich ja zumindest, woran ich bin.
Gerti hat folgendes geschrieben:: | Du musst Dich von der obersten Ebene "hinabarbeiten"... |
Wie meinst du das? Wenn ich ja nicht weiß, in welchem Verzeichnis
ich gerade stehe, dann sehe ich auch keine eindeutige Möglichkeit mich
dort hinab zu arbeiten. Es sei denn, ich habe für jedes Verzeichnis
einen eindeutigen Namen, oder?
@TAP-Gurus
Wäre das nicht auch noch eine TAP-Funktion für einer der kommenden TAP-Releases?
Bye, Trridy |
|
|
|
|
 | |  |
Verfasst am: Di 03. Mai 2005, 14:05 |
|
|
Eber |
TAP-Guru |

 |
|
Anmeldungsdatum: 07.05.2004 |
Beiträge: 1696 |
Wohnort: Mainz |
|
|
|
 |
 |
 |
|
Probiere mal das:
static void AWToolGotoRoot(){
word a = 0;
TYPE_File file;
TAP_Hdd_FindFirst(&file);
while ( file.name[0]=='.' && a<32 ) {
if ( TAP_Hdd_ChangeDir("..") != 0 ){
break;
}
a=a+1;
TAP_Hdd_FindFirst(&file);
}
}
Damit kommst Du immer ins Root-Verzeichnis. Der Code kommt
ursprünglich nicht von mir - ich habe nur vergessen von wem ich ihn
habe  |
|
|
|
|
 | |  |
Verfasst am: Di 03. Mai 2005, 15:46 |
|
|
Lucky B |
TAP-Guru |

|
|
Anmeldungsdatum: 03.05.2004 |
Beiträge: 197 |
|
|
|
|
 |
 |
 |
|
Eber hat folgendes geschrieben:: |
Damit kommst Du immer ins Root-Verzeichnis. Der Code kommt ursprünglich
nicht von mir - ich habe nur vergessen von wem ich ihn habe  |
Hi Eber,
der Code kommt von mir, den hatte ich mal im Forum gepostet, da in
vielen TAPS das wechseln ins root Verzeichnis mit häufigen aufrufen von
wechseln ins nächst höhere Verzeichnis realisiert wurde und das
ziemmlich lange dauerte.
gruß
Lucky B |
|
|
|
|
 | |  |
Verfasst am: Di 03. Mai 2005, 16:17 |
|
|
Eber |
TAP-Guru |

 |
|
Anmeldungsdatum: 07.05.2004 |
Beiträge: 1696 |
Wohnort: Mainz |
|
|
|
 |
 |
 |
|
Dann noch nachträglich ein "Danke schön" - meine ursprüngliche Routine war deutlich langsamer als Deine Methode.
Grüße
Dann spende ich nun auch wieder was
Code: | static bool AWToolGotoPath(char *path){
char *startPos;
char *endePos;
bool ready;
AWToolGotoRoot();
startPos=path;
if ((*startPos)!='/'){
//Fehler:Pfad beginnt nicht mit /
return FALSE;
}
startPos=startPos+1;
ready=FALSE;
while (ready==FALSE){
endePos=startPos;
while (((*endePos)!=0) && ((*endePos)!='/')){
endePos=endePos+1;
}
if ((*endePos)==0){
ready=TRUE;
TAP_Hdd_ChangeDir(startPos);
} else {
(*endePos)=0;
TAP_Hdd_ChangeDir(startPos);
(*endePos)='/';
startPos=endePos+1;
}
}
return TRUE;
} |
Damit kann direkt in einen bestimmten Pfad springen
z.B. mit AWToolGotoPath("/MP3/PinkFloyd") direkt in den Ordner PinkFloyd, egal welches Verzeichnis gerade das aktuelle ist.
Grüße |
|
|
|
|
 | |  |
Verfasst am: Mi 04. Mai 2005, 8:41 |
|
|
Trridy |
Benutzer |

|
|
Anmeldungsdatum: 11.04.2005 |
Beiträge: 39 |
|
|
|
|
 |
 |
 |
|
Hallo,
Die Routinen kann ich sicher auch noch gebrauchen
Danke dafür. Allerdings helfen diese nicht, mein Problem zu lösen (oder
doch?). Ich bräuchte eine Methode den aktuellen Verzeichnisnamen
herauszubekommen. Wenn dies möglich ist, könnte ich mich z.B. mit
AWToolGotoRoot() hinaufarbeiten und würde so den den kompletten Pfad
erhalten.
Bye, Trridy |
|
|
|
|
 | |  |
Verfasst am: Mi 04. Mai 2005, 9:03 |
|
|
Eber |
TAP-Guru |

 |
|
Anmeldungsdatum: 07.05.2004 |
Beiträge: 1696 |
Wohnort: Mainz |
|
|
|
 |
 |
 |
|
das
wird schwierig....eine Idee (aber seeehr mühsam). Im aktuellen
Verzeichnis eine Dummy-Datei anlegen. Eine Verzeichnisebene höher
wechseln. Alle direkten Unterverzeichnisse durchsuchen, ob sie die
Dummy-Datei enthalten, falls ja diese löschen und Verzeichnisnamen
merken und dann das Spiel auf dieser Ebene wiederholen bis im Root
angekommen. Unterwegs die gesammelten Verzeichnisnamen zu einem Pfad
zusammensetzen. (Und anschließend mit diesem Pfad ggf. wieder in das
ursprüngliche Verzeichnis wechseln). Die Performance ist natürlich
katastrophal.....
Grüße |
|
|
|
|
 | |  |
Verfasst am: Do 05. Mai 2005, 10:03 |
|
|
Trridy |
Benutzer |

|
|
Anmeldungsdatum: 11.04.2005 |
Beiträge: 39 |
|
|
|
|
 |
 |
 |
|
Hi,
@Eber
Hatte diesen Gedanken in ähnlicher Form. Würde die Dummydatei
jedoch mit speziellen Namen versehen (z.b. "DirFile"). In dieser ist
dann der gesamte Pfad abgelegt. Gibt es keine derartige Datei, wird
diese mit deinem Vorschlag erstellt. Somit wäre die Performanceeinbuße
nur beim erstmaligen Anlegen der Fall.
Bleibt nur noch das Problem bei einem update zu lösen, wenn ein Verzeichnis umbenannt od. verschoben wird...
@All
Einfacher wäre es, wenn hier von Topfiel eine entsprechene TAP-Funktion bereitgestellt würde. Wie beantrage ich das am besten?
Bye, Trridy |
|
|
|
|
 | |  |
Verfasst am: So 15. Mai 2005, 16:15 |
|
|
DeadBeef |
Erfahrener Benutzer |

|
|
Anmeldungsdatum: 28.03.2005 |
Beiträge: 90 |
Wohnort: am Schwäbischen Meer |
|
|
|
 |
 |
 |
|
Um
den Pfad zu bestimmen, muss man die Startclusternummer des jeweils
aktuellen Verzeichnises auf den Dateinamen im übergeordneten
Verzeichnis mappen. Beispielcode:
Code: |
// The function stores the current working directory to the
// memory pointed to by pPath.
void getCwd(char *pPath)
{
// two string buffers
char str1[255];
char str2[255];
TYPE_File file;
char *pStr1 = str1;
char *pStr2 = str2;
int rc;
int i;
int startCluster;
strcpy(str1,"/"); // default path
// The implementation relies on the fact that the first
// file in a directory is always the "." file (the directory
// itsself).
// TODO: Otherwise scan all file names in the directory for "."
TAP_Hdd_FindFirst(&file);
// loop until no "." is found (i.e. the current dir is the root)
while(strcmp(file.name, ".") == 0)
{
// remember the start cluster
startCluster = file.startCluster;
if(TAP_Hdd_ChangeDir("..") != 0)
{
// no parent directory, should not happen
// TODO: add error handling
break;
}
// find the file with the matching startCluster number
rc = TAP_Hdd_FindFirst(&file);
for(i = 1; i < rc; i++)
{
if(file.startCluster == startCluster)
{
char *pTmp;
// start clusters match
// prepend the name
// TODO: copy operation can be optimized
strcpy(pStr2,"/");
strcat(pStr2,file.name);
strcat(pStr2,pStr1);
// swap the string pointers
pTmp = pStr1;
pStr1 = pStr2;
pStr2 = pTmp;
break;
}
// get the next file
TAP_Hdd_FindNext(&file);
}
if(i == rc)
{
// no matching file found
// TODO: add error handling
}
// get the first file in the current directory
TAP_Hdd_FindFirst(&file);
}
strcpy(pPath,pStr1);
}
|
Gruß
DeadBeef |
|
|
|
|
 | |  |
Verfasst am: Fr 20. Mai 2005, 19:59 |
|
|
Acade |
Erfahrener Benutzer |

 |
|
Anmeldungsdatum: 19.04.2005 |
Beiträge: 56 |
Wohnort: Bayern |
|
|
|
 |
 |
 |
|
Man kann es aber auch rekursiv machen , mit Bufferoverflow-Schutz und im gleichen Verzeichnis bleiben, in dem man vor dem Aufruf war
(Funktion liefert strlen(buf) zurück, bzw. im Fehlerfall <= 0):
Code: |
int TAL_Dir_Get (char *buf, int size)
{
TYPE_File file;
dword cno;
int len;
TAP_Hdd_FindFirst (&file);
if (strcmp (file.name, ".") || TAP_Hdd_ChangeDir (".."))
{
strcpy (buf, "/");
return (1);
}
cno = file.startCluster;
TAP_Hdd_FindFirst (&file);
do
{
if (file.startCluster == cno)
{
if ((size -= (len = strlen (file.name) + 1)) > 0 &&
(size = TAL_Dir_Get (buf, size)) > 0)
{
if (size == 1) size = 0;
buf[size] = '/';
strcpy (buf + size + 1, file.name);
size += len;
}
TAP_Hdd_ChangeDir (file.name);
return (size);
}
}
while (TAP_Hdd_FindNext (&file));
return (0);
}
|
Fertig verwendbar von http://acade.au7.de/tal.zip
Viel Spaß damit,
Acade
PS: Der Rest in tal.h kann gerne auch verwendet werden, aber
richtige Doku gibt's dafür so schnell nicht. Bleibt aber alles für die
Zukunft kompatibel, wenn ich auch noch nicht weiß, wieviel Zeit ich
dafür spendieren werde ...  |
|
|
|
|
 | |  |
Verfasst am: Sa 21. Mai 2005, 0:03 |
|
|
DeadBeef |
Erfahrener Benutzer |

|
|
Anmeldungsdatum: 28.03.2005 |
Beiträge: 90 |
Wohnort: am Schwäbischen Meer |
|
|
|
 |
 |
 |
|
Uups, mir ist ganz entgangen, dass in meinem Beispiel das ursprüngliche Verzeichnis nicht wiederhergestellt wird.
DeadBeef |
|
|
|
|
TOPFIELD.de Board Foren-Übersicht » TAP
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst Deine Beiträge in diesem Forum nicht bearbeiten. Du kannst Deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1
|
|
|
 |
|
|
|