Forum: PC-Programmierung alle .htm-Dateien im Verzeichnis nacheinander öffnen


von Matthias W. (matt007)


Lesenswert?

Ich habe ein altes Turbo-C-Programm, das dos_firstfind und dos_nextfind 
benutzt um Dateien in Verzeichnissen zu öffnen. Nun möchte ich alle 
.htm-Dateien in einem Verzeichnis nacheinander öffnen und bearbeiten 
lassen. Als Compiler nehme ich GCC in der DEV C++ Umgebung. Leider kennt 
diese Umgebung diese firstfind und nextfind-Befehle nicht.

Kann mir jemand sagen (vielleicht mit Hinweis auf ein Code-Beispiel) was 
ich stattdessen benutzen kann?

Vielen Dank !
Matthias

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

opendir() etc sollte er kennen.

von Matthias W. (matt007)


Lesenswert?

Joachim Drechsel schrieb:
> opendir() etc sollte er kennen.

Danke. Das kennt er. Gibts zu diesem Thema ein brauchbares 
Code-Beispiel?

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Matthias W. schrieb:
> Gibts zu diesem Thema ein brauchbares
> Code-Beispiel?

Ja.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

in der WindowsAPI gäbe es da noch FindFirstFile/FindNextFile die ähnlich 
den DOS-Befehlen funktionieren.


#include <windows.h>
....
{
  HANDLE hFind = NULL;

  hFind = FindFirstFile(sPath, &fdFile);

  if(hFind == INVALID_HANDLE_VALUE) return 0;

  do {

  }
  while(FindNextFile(hFind, &fdFile));

  FindClose(hFind);

}

http://stackoverflow.com/questions/2314542/listing-directory-contents-using-c-and-windows

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> 
http://stackoverflow.com/questions/2314542/listing-directory-contents-using-c-and-windows

Vielen Dank Dennis !

Leider scheint in dem Installationspaket von GCC die Windows API nicht 
dabei zu sein. Jedenfalls finde ich FindFirstFile nicht in den 
Header-Dateien.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

MingW magste nicht ? Oder andere Frage, welche GCC für Windows nimmste ?
Und Codeblocks ist ein würdiger Nachfolger von Bloodshed Dev C++.

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> MingW magste nicht ?

ich habe keine Abneigung gegen MingW Dennis. Die Dev C++ verwendet das 
ja meines Wissens.

> Oder andere Frage, welche GCC für Windows nimmste ?

es gibt ja nicht so viele Möglichkeiten. Cygwin oder MingW.

> Und Codeblocks ist ein würdiger Nachfolger von Bloodshed Dev C++.

Danke für den Hinweis. Ich kann das mal ansehen. Eclipse gäbe es auch. 
Das sind halt leider manchmal riesige Pakete. Schwer zu begreifen für 
einen Einsteiger, der um 1990 mit Turbo C effizient gearbeitet hatte.

Turbo C scheint nicht totzukriegen. Ich sah Videos wie man das unter XP 
bzw. Win7 in Betrieb nimmt. Auch das wäre also möglich.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Schau dir doch mal LCC an: http://www.cs.virginia.edu/~lcc-win32/ damit 
hab ich "früher" mal gearbeit als ich für Windows ein C-Programm 
geschrieben habe, hat natürlich keine IDE aber für einfache Sachen 
braucht es das auch nicht.

von Matthias W. (matt007)


Lesenswert?

Läubi .. schrieb:
> Schau dir doch mal LCC an

Danke Läubi !

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Also im Normalfall hat MingW die Includes und die Libs für die Windows 
API dabei.


Versuch doch mal:

#include <windows.h>
#include <stdio.h>

int main() {
    OSVERSIONINFO oi;
    oi.dwOSVersionInfoSize= sizeof(OSVERSIONINFO) ;
    if(GetVersionEx(&oi)) {
        switch(oi.dwPlatformId) {
            case VER_PLATFORM_WIN32_NT: printf("WINNT ");break;
            case VER_PLATFORM_WIN32_WINDOWS: printf("WINDOWS ");break;
            case VER_PLATFORM_WIN32s: printf("WIN32s ");break;
            default: printf("Unknown ");
        }
        printf("%lu.%lu\r\n",oi.dwMajorVersion,oi.dwMinorVersion);
    }
    else printf("Fehler\n");
    return 0;
}

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Also im Normalfall hat MingW die Includes und die Libs für die Windows
> API dabei.

Hallo Dennis, WINNT 5.1 kommt dabei raus.

Codeblocks habe ich installiert. Im Paket war kein GCC dabei. Der muss 
also noch integriert werden oder ich finde ein Paket wo das mit dabei 
ist.

von Dennis (Gast)


Lesenswert?

GetVersionEx ist eine Funktion der WindowsApi.
So einfach lassen die sich einsetzen.

Gruß Dennis

MingW bringt alles zur WinApi mit, außer eine Hilfedatei.

von Matthias W. (matt007)


Lesenswert?

Dennis schrieb:
> GetVersionEx ist eine Funktion der WindowsApi.
> So einfach lassen die sich einsetzen.

Danke Dennis !

> MingW bringt alles zur WinApi mit, außer eine Hilfedatei.

prima. Dev++ bringt eine Menge an Hilfe mit. Das gefällt mir gut. Leider 
hat mein Versuch Dateien mit Wildcard (*.htm) im Verzeichnis zu finden 
mit dem Befehl glob nicht geklappt. Die Datei glob.h scheint nicht 
vorhanden im MingW unter der DEV++ Umgebung. Der Explorer findet auch 
nichts.

So einfach ist das leider nicht das alte Programm das einst unter TC 
lief wieder zum Leben zu erwecken. Das wird mir immer klarer.

Codeblocks läuft noch nicht mit GCC.

von Matthias W. (matt007)


Lesenswert?

leider scheint glob zu fehlen:

https://code.zmaw.de/projects/cdo/wiki/Win32
"Globbing: New feature in 1.5.9 cannot be used with the win32 version, 
because mingw does not include glob.h"

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Leider hat mein Versuch Dateien mit Wildcard (*.htm) im Verzeichnis zu
> finden mit dem Befehl glob nicht geklappt.

Brauchst Du ja auch nicht. Du hast jetzt einen Compiler, mit dem Du die 
Win32-API verwenden kannst.

Und da sind FindFirstFile und FindNextFile Deine Freunde, wie Dennis 
auch schon schrieb:

Beitrag "Re: alle .htm-Dateien im Verzeichnis nacheinander öffnen"

von Matthias W. (matt007)


Lesenswert?

als Compilersatz ist in der DEV++ angegeben: TDM-GCC 4.7.1 32bit 
Release.

von Matthias W. (matt007)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Und da sind FindFirstFile und FindNextFile Deine Freunde

Danke für den Hinweis Rufus. Die Funktion hatte ich erst mal nicht 
gefunden - warum auch immer. Sie steht in der winbase.h.

Mein erster Versuch damit orientiert sich an einem MS-Beispiel:

#include <windows.h>
#include <stdio.h>

void main (int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;

  hFind = FindFirstFile("C:\\doc\\CSRC\\*.htm", &FindFileData);
  if (hFind == INVALID_HANDLE_VALUE)
  {
     printf ("FindFirstFile failed (%d)\n", GetLastError());
     return;
  }
  else
  {
     printf ("The first file found is %s\n",FindFileData.cFileName);
     FindClose(hFind);
  }
}

Leider kommt damit die Meldung "The first file found is c - how can I 
get this..."

Keine Ahnung wieso damit nicht die erste Datei mit der Endung .htm im 
Verzeichnis C:\\doc\\CSRC\\*.htm gefunden wird. Diese suche ich ja.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Leider kommt damit die Meldung "The first file found is c - how can I
> get this..."


Du wirst in Deinem Verzeichnis eine Datei haben, die "c - how can I get 
this..." etc. heißen wird.

Vergiss das mit der "ersten" Datei; welche ist die "erste"? Wer legt 
fest, was die "erste" ist? Eben. Der Explorer sortiert, und je nach 
Sortierung ist das eine oder das andere das erste.

Und auch dir in der Kommandozeile sortiert.

Ändere mal Dein Programm zu
1
void main (int argc, char *argv[])
2
{
3
  WIN32_FIND_DATA FindFileData;
4
  HANDLE hFind;
5
6
  hFind = FindFirstFile("C:\\doc\\CSRC\\*.htm", &FindFileData);
7
  if (hFind == INVALID_HANDLE_VALUE) 
8
  {
9
    printf ("FindFirstFile failed (%d)\n", GetLastError());
10
    return;
11
  } 
12
13
  do
14
  {
15
    printf("File '%s'\n", FindFileData.cFileName);
16
  }
17
  while (FindNextFile(hFind, &FindFileData));
18
  
19
  FindClose(hFind);
20
}

und sieh Dir die Ausgabe an.

von Matthias W. (matt007)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Du wirst in Deinem Verzeichnis eine Datei haben, die "c - how can I get
> this..." etc. heißen wird.

Danke Rufus !

Das wars. Da ist tatsächlich eine .htm-Datei die so heißt. Das hat mich 
verwirrt weil ich die Endung nicht gleich sah und vor allem nach Dateien 
gesucht hatte die viel kürzere Namen haben.

Dein Beispiel geht prima. Alle .htm werden aufgelistet.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Du solltest wohl mal das Ausblenden von bekannten Erweiterungen 
ausschalten in Windows XP :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dennis Heynlein schrieb:
> Du solltest wohl mal das Ausblenden von bekannten Erweiterungen
> ausschalten in Windows XP :)

Microsoft wird sich ja wohl was dabei gedacht haben, immerhin ist das 
auch unter Windows 8 immer noch standardmäßig eingeschaltet.

Viren- und Wurmprogrammierern soll das Leben wohl nicht zu schwer 
gemacht werden ...

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Du solltest wohl mal das Ausblenden von bekannten Erweiterungen
> ausschalten in Windows XP :)

ausgeblendet ist da nichts. Scheint als ob ich eine Brille brauche . . .

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

Hallo Dennis und Rufus,

ich habe anbei das C-file angehängt, das den Ordner nach den 
.htm-Dateien durchsucht, diese nacheinander öffnet und in diesen Dateien 
die includes bearbeitet. Eine Rekursion ist bisher nicht realisiert, 
d.h. wenn ein include eine weitere Datei includiert so wird das nicht 
aufgelöst.

Bis zum 3. include in der ersten Datei klappt es. Dann stürzt die Datei 
in Codeblocks mit einem Segmentation fault ab. Momentan weiß ich nicht 
woran das liegt. So sehr groß ist der Code ja nicht.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Haste mal ein paar deiner ominören Dateien wo es abkackt ?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Wieso benutzt du strtok ? und nicht 
http://www.cplusplus.com/reference/cstring/strchr/ ?

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

Dennis Heynlein schrieb:
> Haste mal ein paar deiner ominören Dateien wo es abkackt ?

klar Dennis. Die erste gefundene .htm-Datei ist 
www.gesundohnepillen.de/abrams.htm.
Damit tritt das Problem auf. Die Includes dazu liegen im Verzeichnis 
www.gesundohnepillen.de/inc. Da der Server die SSI-Befehle ausführt 
müsstet Du die Dateien wohl per ftp holen.

Um Dir das zu ersparen habe ich test.zip gepackt.

Die printf-Befehle sind eine Hilfe um zu sehen was passiert.

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Wieso benutzt du strtok ? und nicht
> http://www.cplusplus.com/reference/cstring/strchr/ ?

der Grund ist daß ich ein Beispiel fand mit strok das zu tun schien was 
ich an Funktion suchte. Wenn mit strchr derselbe Zweck auf eine bessere 
Art und Weise zu erreichen ist kann ich gerne auch das nehmen.

Meine Erfahrungen mit C liegen Jahre zurück. Es ist mühsam mich da 
einzuarbeiten. Die paar Zeilen Code haben mich 2 Tage gekostet.

Wie man Includes in den Include-Dateien selbst behandelt ist nicht 
gelöst bisher. Natürlich könnte man den Generator erst mal die Includes 
selbst bearbeiten lassen. Mit Rekursion habe ich keinerlei Erfahrung.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Morgen kuck ichs mir mal an :)

strchr sucht die Position von 'char' und liefert nen Pointer
Es liegt dann bei dir bei dieser Position ein \0 hinzusetzen.
So macht es zumindest strtok.

von Dennis H. (c-logic) Benutzerseite


Angehängte Dateien:

Lesenswert?

Deinen Fehler kann ich nicht reproduzieren.
Aber du hast da ziemlich wenig Prüfungen ob das Dateiöffnen geklappt 
hat.

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Deinen Fehler kann ich nicht reproduzieren.

Vielen Dank Dennis. Das klingt so als ob es dann auch bei mir 
durchlaufen sollte. Vielleicht ist der Speicher zu knapp. Es sind zwar 
4GB verbaut. Nur habe ich oft mehrere Fenster geöffnet und der alte 
Dreamweaver hat wohl ein Speicherleck. So manches Programm klemmt dann 
und ich müsste oft neu booten.

> Aber du hast da ziemlich wenig Prüfungen ob das Dateiöffnen geklappt hat.

Das stimmt. Es gibt sicher noch einiges was man einbauen könnte. Erst 
mal scheint mir die Funktion wichtig. Die Includes müssen sauber 
aufgelöst werden. Das ist der nächste Schritt.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Die Größe des Speichers ist ja ansich uninteressant. Dein Programm liefe 
im Endeffekt sogar problemlos auf DOS (Von der WinAPI mal abgesehen, 
obwohl es da ja noch Win3.11 gibt).
Eventuell sind bei dir ja nicht alle Dateien erreichbar durch das 
Rechtesystem von Windows.
Ich hab hier Windows 7-64bit Prof mit ~ 3,5 GB RAM.

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Eventuell sind bei dir ja nicht alle Dateien erreichbar durch das
> Rechtesystem von Windows.

gute Frage. Ich kann ja Abfragen einbauen ob ein Öffnen möglich ist.

Getestet habe ich in der CodeBlocks-Umgebung mit den default 
Einstellungen. Kann das ein Problem machen?

Früher nutzte ich Turbo C. Da gab es kaum Probleme. Es muss sich ja 
finden lassen warum unter Codeblocks dieser Segmentation fault kommt. Ob 
das mit Memory models zusammenhängt? Bei Turbo C konnte man damals 
solche auswählen. Das habe ich diesmal nicht getan.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Solange Du nicht den Rückgabewert hiervon auswertest

>   quelldatei=fopen(dummy,"r");    /* oeffne .htm-Quelldatei lesend */

ist jede weitere Fehlersuche sinnlos.

Nein, mit Speichermodellen hat es nicht zu tun, so etwas gibt es 
glücklicherweise nicht mehr.

Du solltest Dir mal ansehen, wie man mit Deinem Entwicklungssystem ein 
Programm im Debugger laufen lassen kann, da kannst Du nämlich selbst 
herausfinden, was schiefläuft.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Es wird wohl ein NULL_Pointer von fopen sein.
Der im weiteren Lauf des Programmes noch mehr Nullpointer provoziert.
Wenn man auf einen Nullpointer schreibt gibts einen Crash.

Man kann "quelldatei=fopen(dummy,"r");" auch so schreiben:

if(!(quelldatei=fopen(dummy,"r"))) { printf("Error open 
%s\r\n",dummy);exit(1); }

In Windows gibt es nur noch das Memory-Modell Flat.

von Matthias W. (matt007)


Lesenswert?

Du hast recht Rufus. Da liegt das Problem. Mit dem Debugger fand ich es 
nicht weil der Fehler erst ziemlich spät auftritt.

Auf dem Rechner hatte ich eine Datei umbenannt. Die findet er dann nicht 
und stürzt ab. Bei dem Datenstand für Dennis hatte ich diese Datei 
umbenannt. Daher lief es bei ihm.

Gott sei Dank bin ich nun einen Schritt weiter. Danke Dir und Dennis !

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Es wird wohl ein NULL_Pointer von fopen sein.

Danke Dennis. Das ist es wohl. Ich baue Deinen Vorschlag ein:

if(!(quelldatei=fopen(dummy,"r"))) { printf("Error open
%s\r\n",dummy);exit(1); }

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Die Windows-Api besitzt übrigens auch Dateibefehle :)

Wenn Du da voll einsteigen möchtest.
CreateFile ist der zentrale Befehl für Dateien/Geräte öffnen/erstellen.
ReadFile/Writefile für lesen/schreiben
CloseHandle für Datei schliessen.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Die Windows-Api besitzt übrigens auch Dateibefehle :)

Danke für den Hinweis Dennis. Es drückt mich noch immer das Einbinden 
der Includes. Es bringt Probleme mit sich. Dabei war die Grundidee so 
einfach:

+ bearbeite die htm-Dateien mit dem alten Dreamweaver 4 mit Code- und 
Layout-Fenster gleichzeitig. Das geht intuitiv und schnell
+ erstelle Kopfzeilen für die Dateien und binde sie über Includes ein.
+ erstelle Menüs für diese Dateien und binde sie über Includes ein.
+ verwalte die .htm und die Includes über Dreamweaver
+ lege alle Includes in einen Ordner inc.
+ nutze den Linkchecker von Dreamweaver über die .htm und Includes 
hinweg.
+ lade die .htm und die Includes per ftp auf den Server und lasse sie 
dort auflösen.
+ erstelle ein Tool um für den PC eine lauffähige Varianten zu bekommen, 
das die Includes direkt in die Dateien einbindet so daß diese direkt mit 
dem Browser betrachtbar sind.

Die Seiten http://www.gesundohnepillen.de und 
http://www.mweisser.50g.com laufen. So weit so gut.

Zu den Problemen:
- damit Dreamweaver keine Fehler mit dem Linkchecker meldet musste ich 
in den Includes den Dateinamen /, /inc, /pic usw. voranstellen. Das geht 
zwar so am Server macht aber nun Ärger bei der Einbindung der Includes 
in die htm-Dateien.
- die Funktion von Dreamweaver aus die Dateien korrekt im Browser zu 
betrachten schlägt fehl. Die Includes werden teilweise nicht korrekt 
umgesetzt, Links passen nicht.
- nach dem Includieren mit meinem Programm verweisen die /, /inc, /pic 
auf das Stammverzeichnis der Festplatte. Dort liegen jedoch die Dateien 
nicht. Da der Pfad falsch ist werden die Dateien nicht gefunden. Die 
Links die in den Includes stehen versagen also. Mein Generator müsste 
das nun reparieren. Ein einfaches Einbinden schlägt fehl.

Dies zur Info. Vielleicht kennt jemand ja dieses Problem.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Ich dachte für diese Erreichbarkeit der Quelldateien hast du dieses hier 
eingebaut ?

"char quelle[]="C:/doc/Homepage_test";
    strcpy (dummy,hilf);
    strcat (dummy,quelle);
    strcat (dummy,"/");
    strcat (dummy,FindFileData.cFileName);
    quelldatei=fopen(dummy,"r");    /* oeffne .htm-Quelldatei lesend */"

Es scheitert im Prinzip nur an den Pfäden zu den Dateien.

Das Problem ist ja nicht wirklich ein großes.

Aber mal andere Frage.
PHP auf Serverseite steht dir nicht zur Verfügung ?
Benutzt du keinen Lokalen HTTP-Server um die Dateien dann korrekt 
angezeigt zu bekommen  über localhost ?

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> Ich dachte für diese Erreichbarkeit der Quelldateien hast du dieses hier
> eingebaut ?

Danke Dennis. Die Quelldateien sind durch das Programm erreichbar. Kein 
Problem damit.

> Es scheitert im Prinzip nur an den Pfaden zu den Dateien.

ja. Es scheitert daran, daß ich - um den Betrieb und Check im 
Dreamweaver zu ermöglichen in den Include-Dateien absolute Pfade bezogen 
auf den Root des Servers in den Includes verwenden musste. Ich musste 
also einen / vor den Dateinamen einführen. In den eigentlichen 
htm-Dateien ist sonst kein / davor.

Dieser / verhindert nun daß beim Aufruf des Browsers auf dem Laptop vom 
Dreamweaver aus die Dateien gefunden werden weil sie eben nicht im 
selben Pfad stehen wie auf dem Server.

> Das Problem ist ja nicht wirklich ein großes.

es scheint nicht komplett behebbar, weil Dreamweaver scheinbar diese / 
braucht weil sonst der Link-Check fehlschlägt. So aber schlägt die 
Anzeige im Browser fehl. Das scheint momentan nicht behebbar.

Beheben will ich die Probleme im Offline-Betrieb. Seit 2 Tagen bastele 
ich an einem Programm das die inc-Dateien so korrigieren soll daß der 
Offline-Betrieb fehlerfrei klappt. Noch immer sind Fehler im Code, die 
ich schwer finde.

> Aber mal andere Frage.
> PHP auf Serverseite steht dir nicht zur Verfügung ?

doch. PHP gibt es. Auf dem Server klappt ja alles - auch ohne PHP.

> Benutzt du keinen Lokalen HTTP-Server um die Dateien dann korrekt
> angezeigt zu bekommen  über localhost ?

Du meinst auf dem Laptop - offline? Nein - da wollte ich bisher keinen 
Webserver einrichten. Das wäre natürlich möglich. Mir schien es 
einfacher das C-Programm zu schreiben, das die Einbindungen auflöst. 
Natürlich könnte ich auch einen Webserver einrichten und ein 
php-Programm schreiben, das die Dateien korrekt rausschreibt. Das schien 
mir bisher der größere Aufwand weil ich keine php-Erfahrung habe.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Mir schien es einfacher das C-Programm zu schreiben, das die
> Einbindungen auflöst

Wenn du XAMPP nutzt, ist das innerhalb von vielleicht einer halben 
Stunde eingerichtet vs. eine Woche wo du jetzt mit deinem C-Programm 
rumprobierst.

Matthias W. schrieb:
> und ein php-Programm schreiben, das die Dateien korrekt rausschreibt

Lass dich doch nicht verwirren, PHP brauchst du hier gar nicht wenn du 
es nicht auch auf deinem Zielsystem nutzt, von lesen her geh ich mal 
davon aus das du SSI nutzt?
Also XAMPP installieren, daten in den htdocs Ordner "hochladen" und 
einfach per localhost zugreifen, ggf. musst du SSI noch in der 
Konfiguration aktivieren und das war es.

Ansosnten ist immer noch schleierhaft was du erreichen willst, z.B. 
warum "die anderen" nicht einfach die Online-Webvariante deiner Dateien 
nutzen können...

von Nicolas S. (Gast)


Lesenswert?

Habe mir mal den Source angesehen...

"/meine_vortraege.htm" geht auf einem normalen Windowsrechner nicht.
"./meine_vortraege.htm" geht immer.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nicolas S. schrieb:
> geht immer

bedeutet aber was komplett anderes!

von Nicolas S. (Gast)


Lesenswert?

Habe mir mal den Source angesehen...

"/meine_vortraege.htm" geht auf einem normalen Windowsrechner nicht.
"./meine_vortraege.htm" geht immer.

Ergänzung: Wenn Du bei den Pfaden auf den impliziten Root verzichtest 
und komplett relative Pfade verwendest, geht das alles sehr problemlos 
lokal und im Web.

Oft sieht man absolute Pfade (mit URL), was lokal nicht so leicht zu 
testen ist - aber darum scheint es Dir ja nicht zu gehen.

von Nicolas S. (Gast)


Lesenswert?

Läubi .. schrieb:
> bedeutet aber was komplett anderes!

In diesem Fall nicht: Beide Dateien liegen flach auf root-Ebene. 
Generell hast Du natürlich Recht.

von Matthias W. (matt007)


Lesenswert?

Läubi .. schrieb:
> Wenn du XAMPP nutzt, ist das innerhalb von vielleicht einer halben
> Stunde eingerichtet vs. eine Woche wo du jetzt mit deinem C-Programm
> rumprobierst.

Danke für den Hinweis. Natürlich kann ich das mal einrichten. Das 
Programm jedoch das ich geschrieben habe sollte nun rascher fertig sein 
nach all den Vorarbeiten. So war meine Hoffnung.

> von lesen her geh ich mal davon aus das du SSI nutzt?

ja. XAMPP kann das also auflösen. Das hatte ich vermutet.

> Ansosnten ist immer noch schleierhaft was du erreichen willst, z.B.
> warum "die anderen" nicht einfach die Online-Webvariante deiner Dateien
> nutzen können...

es gibt Menschen, die meine Seite lieber offline betrachten als online. 
Für diese möchte ich eine Version bereitstellen die offline mit dem 
Browser nutzbar ist. Das will ich erreichen.

von Klaus Maus (Gast)


Lesenswert?

Hallo Dennis,

Dennis Heynlein schrieb:
> MingW magste nicht ? Oder andere Frage, welche GCC für Windows nimmste ?
> Und Codeblocks ist ein würdiger Nachfolger von Bloodshed Dev C++.

Entschuldige bitte, aber der Mann sucht keinen anderen Compiler und 
keine andere IDE, sondern eine Lösung, wie er die Dateien in einem 
Verzeichnis auflisten kann. Dazu gibt es genau eine einzige richtige 
Lösung, nämlich den Standard mit opendir(), listdir(), und closedir(). 
Diese Lösung ist deswegen richtig, weil sie plattformunabhängig und 
standardisiert ist.

Dabei ist es dann auch völlig egal, welche Version vom GCC, oder 
überhaupt welchen C-Compiler der OP verwendet, solange dieser 
standardkonform ist -- was heutzutage wohl so ziemlich jeder C-Compiler 
sein müßte. Beispiel:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <sys/types.h>
4
#include <dirent.h>
5
6
int main(int argc, char* argv[]) {
7
  DIR* dh = NULL;    /* Verzeichnishandle */
8
  struct dirent *sd; /* Verzeichniseintrag */
9
10
  if(argc != 2) {
11
    fprintf(stderr, "usage: %s <dir>\n", argv[0]);
12
    exit(-1);
13
  }
14
15
  dh = opendir(argv[1]); /* Verzeichnishandle oeffnen */
16
  if(dh == NULL) {
17
    fprintf(stderr, "Could not open: %s\n", argv[1]);
18
    exit(-2);
19
  }
20
21
  while(1) {
22
    sd = readdir(dh); /* 1 Verzeichniseintrag lesen */
23
    if(sd == NULL) break; /* wenn Ende: abbrechen */
24
    printf("Datei: %s\n", sd->d_name); /* ausgeben */
25
    /* ... hier irgendwas mit der Datei machen ... */
26
  }
27
  
28
  closedir(dh); /* Verzeichnishandle schliessen */
29
30
  return 0;
31
}

Diesem Beispiel fehlt die erweiterte Fehlerbehandlung. In 
Produktionscode sollte mindestens errno bei /readdir() == NULL/ 
abgefragt werden, weil die Funktion readdir() eine NULL nicht nur am 
Ende des Verzeichnishandle, sondern auch im Falle eines Fehlers 
zurückgibt.


MfG,
Klaus

von Nicolas S. (Gast)


Lesenswert?

Matthias W. schrieb:
> Für diese möchte ich eine Version bereitstellen die offline mit dem
> Browser nutzbar ist. Das will ich erreichen.

Hallo Matthias,
in diesem Fall wären durchgehend relative Pfade sicherlich der 
einfachste Weg - eine Ordnerstruktur, die bei Dir lokal funktioniert tut 
dies dann auch online.

Die Klimmzüge mit absoluten Pfaden kenne ich nur dann, wenn 
"Netzmeister" krampfhaft das Offline-Lesen erschweren wollen und 
deswegen als Links mit absoluten Pfaden spicken.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> es gibt Menschen, die meine Seite lieber offline betrachten als online.
> Für diese möchte ich eine Version bereitstellen die offline mit dem
> Browser nutzbar ist.

Dafür gibt es doch aber nun schon hundertfach Programme die das leisten.

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> Habe mir mal den Source angesehen...

Danke Nicolas.

> Wenn Du bei den Pfaden auf den impliziten Root verzichtest
> und komplett relative Pfade verwendest, geht das alles sehr problemlos
> lokal und im Web.

anfangs hatte ich daher "meine_vortraege.htm" eingebaut. Das ging unter 
Dreamweaver 4 und im Browser einwandfrei - bis ich die 
ServerSideIncludes eingebaut habe. In diesen Dateien ging es so nicht. 
Dreamweaver meldete Fehler. Um diese zu vermeiden stellte ich die Links 
so um:
"/meine_vortraege.htm".

> Oft sieht man absolute Pfade (mit URL), was lokal nicht so leicht zu
> testen ist - aber darum scheint es Dir ja nicht zu gehen.

absolute Pfade vermeide ich wenn ich kann.

von Nicolas S. (Gast)


Lesenswert?

"/meine_vortraege.htm" ist ein absoluter Pfad (bezogen auf Server-Root), 
"./meine_vortraege.htm" ein relativer Pfad.

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

Hier ist der bisher letzte Stand des C-Programms. Damit wird das 
Include-Verzeichnis bearbeitet.
Der Teil der klemmt steht hier. Links die beginnen mit src="/ oder 
ref="/ sollen damit umgewandelt werden in src=" oder ref=".

char suche1[]=" src=\"/";  /* suche nach src="/ und entferne / */
char suche2[]=" ref=\"/";  /* suche nach ref="/ und entferne / */

leider scheint der Code das nicht zu tun. Vermutlich ein Codierfehler.
Das erste if sucht die Zeile ab auf das Leerzeichen oder das h von href.
Das zweite if sucht nach dem s oder dem r. So wird geprüft ob da src=" 
steht und das /-Zeichen am Ende dann beim Kopieren weggelassen. Im 
zeilenstring wird das Richtige geliefert - so der Debugger.

for (i=0; ((c=zeilenstring[i])!='\0'); i++){  /* ganze Zeile untersuchen 
*/

        /* pruefe auf src="/ bzw. ref="/ und entferne dann / */
        if ((merker1==0) && ((c==suche1[0])||(c==suche2[0]))) {
          merker1=1;
        }
        if ((merker1==1) && ((c==suche1[1])||(c==suche2[1]))) {
          merker1=2;
        }
        else {
          merker1=0;
        }
        if ((merker1==2) && ((c==suche1[2])||(c==suche2[2]))) {
          merker1=3;
        }
        else {
          merker1=0;
        }
        if ((merker1==3) && ((c==suche1[3])||(c==suche2[3]))) {
          merker1=4;
        }
        else {
          merker1=0;
        }
        if ((merker1==4) && ((c==suche1[4])||(c==suche2[4]))) {
          merker1=5;
        }
        else {
          merker1=0;
        }
        if ((merker1==5) && ((c==suche1[5])||(c==suche2[5]))) {
          merker1=6;
        }
        else {
          merker1=0;
        }
        if ((merker1==6) && ((c==suche1[6])||(c==suche2[6]))) {
          merker1=7;
        }
        else {
          merker1=0;
        }
        if (merker1<7) {
          fputc(c,zieldatei);    /* zeichenweise kopieren bis auf / */
        }

von Matthias W. (matt007)


Lesenswert?

Läubi .. schrieb:
> Dafür gibt es doch aber nun schon hundertfach Programme die das leisten.

eines das wirklich brauchbar funktioniert würde mir reichen.

Probiert hatte ich es mit WinHTTrack. Das dauerte ziemlich lange bis 
dann am Ende eine Version auf der Platte war, die jedoch leider die 
Dateinamen verändert hat.

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> "/meine_vortraege.htm" ist ein absoluter Pfad (bezogen auf Server-Root),
> "./meine_vortraege.htm" ein relativer Pfad.

"meine_vortraege.htm" wäre auch ein relativer Pfad gewesen. Nur warum 
funktionierte er nicht? Etwa deswegen weil das Include im Ordner inc 
lag?

von Klaus Maus (Gast)


Lesenswert?

Hallo Matthias,

Matthias W. schrieb:
> es gibt Menschen, die meine Seite lieber offline betrachten als online.
> Für diese möchte ich eine Version bereitstellen die offline mit dem
> Browser nutzbar ist. Das will ich erreichen.

Dann benutz' doch einfach den Webserver, damit er tut, was er tun soll.

Das heißt: ändere die Seite, lad' sie hoch, und dann lädst Du sie mit 
einem Programm wie wget(1) wieder herunter -- fertig vom Webserver 
geparst mit eingesetzen SSIs und allem drum und dran. Dafür brauchst Du 
kein eigenes Programm und auch sonst nichts, außer natürlich wget(1).

Aufruf:
1
wget -r -x -l0 <url>

wget für Windows findest Du hier: 
http://gnuwin32.sourceforge.net/packages/wget.htm . Wenn Du eine 
Cygwin-Installation für Deinen GCC hast, hast Du es aber wahrscheinlich 
bereits installiert.

HTH,
Klaus

von Klaus Maus (Gast)


Lesenswert?

Hallo Nicolas,

Nicolas S. schrieb:
> in diesem Fall wären durchgehend relative Pfade sicherlich der
> einfachste Weg - eine Ordnerstruktur, die bei Dir lokal funktioniert tut
> dies dann auch online.

Nein, das tut sie leider nicht. Matthias verwendet Server Side Includes 
(SSI), die geparst und ausgeführt werden müssen. Deswegen geht es hier 
nicht um die üblichen Problemchen bei der Referenzierung von externen 
Objekten, sondern um die Referenzierung durch SSIs.

Beste Grüße,
Karl

von Matthias W. (matt007)


Lesenswert?

Klaus Maus schrieb:

Vielen Dank Klaus für das Beispiel. Ich nehme momentan FindFirstFile und 
FindNextFile. Das hat recht rasch funktioniert mit *.htm. Die 
Unix-Äquivalente schienen unter meiner GCC-Installation nicht zu finden.

von Matthias W. (matt007)


Lesenswert?

Klaus Maus schrieb:
> Dann benutz' doch einfach den Webserver, damit er tut, was er tun soll.

also XAMPP installieren? Dann meine Seite da hineinladen.

> Das heißt: ändere die Seite, lad' sie hoch, und dann lädst Du sie mit
> einem Programm wie wget(1) wieder herunter -- fertig vom Webserver
> geparst mit eingesetzen SSIs und allem drum und dran.

klar. Das macht der Webserver.

> wget -r -x -l0 <url>

danke für dem Hinweis. Das klingt umsetzbar.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Probiert hatte ich es mit WinHTTrack. Das dauerte ziemlich lange bis
> dann am Ende eine Version auf der Platte war, die jedoch leider die
> Dateinamen verändert hat.

Solange es funktioniert? Ansonsten: 
http://alternativeto.net/software/httrack/

von Matthias W. (matt007)


Lesenswert?

Läubi .. schrieb:
> Solange es funktioniert?

er ist halt für Nutzer verwirrend wenn die Dateien die man im Netz mit 
der Endung .htm kennengelernt hat nun .html heißen. Ebenso seltsam ist 
es wenn beim Klick auf das Homesymbol nicht so wie erwartet index.htm 
geladen wird sondern ein zusätzlich angelegtes index-2.html.

Wer kann das verstehen? Meine Frage nach dem Warum blieb leider 
unbeantwortet. Im Forum dort fand ich Hinweise daß eine Kopie eines 
800MB-Datenbestands 30GB in Anspruch genommen haben soll. So sehr 
brauchbar erschien mir das nicht.

von Nicolas S. (Gast)


Lesenswert?

Klaus Maus schrieb:
> Matthias verwendet Server Side Includes (SSI)

OK, da hört mein Wissen auf. Betrachtet also alle meine Anmerkungen als 
gegenstandslos.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> er ist halt für Nutzer verwirrend wenn die Dateien die man im Netz mit
> der Endung .htm kennengelernt hat nun .html heißen

Naja, auch nicht weniger verwirrend als file://C:/UserData/ItsMe/.../ 
anstelle von http://domain.de ;-)

Matthias W. schrieb:
> Ebenso seltsam ist es wenn beim Klick auf das Homesymbol nicht so wie
> erwartet index.htm geladen wird sondern ein zusätzlich angelegtes
> index-2.html

Das geschieht häufig wenn du Parameter an andere Seiten übergibst 
(sortierung?) oder unter gleichen URLs (z.B. / und /index.htm sind da 
Kandidaten) gleichen Content hast.

Ich habe vor einiger Zeit mal eine "aktive" Seite so in statisches HTML 
umgewandelt, klar man muss ggf. die ein oder andere Sonderbarkeit 
hinnehmen, oder etwas die Seitenstruktur tunen, aber im großen und 
ganzen hat das gut geklappt.

Matthias W. schrieb:
> fand ich Hinweise daß eine Kopie eines 800MB-Datenbestands 30GB in
> Anspruch genommen haben soll

s.o. es wird (leider) wohl keine duplicate-content Analyse gemacht. Wie 
groß ist den deine Seite überhaupt im Quellcode? Für Spielereien und 
test bietet sich trotz allem ein lokaler Webserver immer an.

von Klaus Maus (Gast)


Lesenswert?

Hallo Nicolas,

Nicolas S. schrieb:
> Klaus Maus schrieb:
>> Matthias verwendet Server Side Includes (SSI)
>
> OK, da hört mein Wissen auf. Betrachtet also alle meine Anmerkungen als
> gegenstandslos.

Das ist eine, nunja, etwas ältere Technologie, die heute kaum mehr 
genutzt wird. Im Prinzip funktioniert das ein bisschen ähnlich wie PHP: 
Du schreibst in Deine HTML-Seite spezielle Kommentare, die der Webserver 
dann durch irgendwas ersetzt. Beispiel:
1
<html><head><title>Beispiel</title></head>
2
<body><!--#include file="navigation.html"-->
3
<h1>Hallo!</h1></body></html>

Anstelle des '<!--#include file="navigation.html"-->' setzt der 
Webserver hier die Datei "navigation.html" ein. Man kann an dieser 
Stelle aber auch CGIs oder Kommandos aufrufen, deren Ausgabe dann an 
dieser Stelle in die Datei eingefügt wird. Diese Technik wurde bei 
statischen Webseiten gerne benutzt, um die Navigation nur in einer Datei 
pflegen zu müssen. Sie ist heute ein wenig in Vergessenheit geraten, da 
heute meistens PHP, Content-Management-Systeme, Skriptsprachen oder 
Templateengines verwendet werden, die meist viel mehr Möglichkeiten 
bieten und dabei performanter sind.

HTH,
Klaus

von Matthias W. (matt007)


Lesenswert?

Läubi .. schrieb:

Danke für die Hinweise Läubi.

> s.o. es wird (leider) wohl keine duplicate-content Analyse gemacht. Wie
> groß ist den deine Seite überhaupt im Quellcode?

ca. 75 MB. Das ist nicht so viel für mehr als 400 htm-Dateien. Der Code 
ist schlank gehalten.

> Für Spielereien und
> test bietet sich trotz allem ein lokaler Webserver immer an.

ja. Wenn ich mal mehr Zeit habe sollte ich das näher ansehen. Momentan 
bin ich froh daß der Converter nun endlich klappt. So erstelle ich in 5 
Minuten eine lauffähige Kopie der Seite.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

hast du denn Zugriff auf den Server ?
So ala CGI/PHP/Perl-tralala ?

von Matthias W. (matt007)


Lesenswert?

Dennis Heynlein schrieb:
> hast du denn Zugriff auf den Server ?

ja Dennis. Die Seiten http://www.mweisser.50g.com und 
http://www.gesundohnepillen.de sind meine Seiten. Beide Seiten nutzen 
dieselbe Datenbasis und werden nur über ein paar Softwareschalter 
unterschiedlich behandelt.

> So ala CGI/PHP/Perl-tralala ?

per ftp. Da ich den content erstelle habe ich die Quellen. Daher klappt 
es für mich rascher die Dateien mit ein paar selbstgeschriebenen 
C-Programmen zusammenzubasteln als runterzuladen.

PHP wird bisher nur für das Gästebuch verwendet. Leider benutzt das kaum 
noch einer. Vielleicht überfordert die Captcha-Abfrage und die Frage 
darüber?

von Nicolas S. (Gast)


Lesenswert?

Hallo Matthias,
nur eins verstehe ich nicht: Wenn Du die Dateien bei Dir ohnehin lokal 
mit einem C-Programm manipulierst, und auch den Webserver komplett unter 
Kontrolle hast, warum erzeugst Du sie dann mit SSI gespickt, anstelle 
direkt die html-Dateien zu erzeugen, die sich der Leser nachher auch 
anschauen soll?

Warum die Unterscheidung zwischen Online- und Offline-Version?

Viele Grüße
Nicolas

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> nur eins verstehe ich nicht: Wenn Du die Dateien bei Dir ohnehin lokal
> mit einem C-Programm manipulierst, und auch den Webserver komplett unter
> Kontrolle hast, warum erzeugst Du sie dann mit SSI gespickt, anstelle
> direkt die html-Dateien zu erzeugen, die sich der Leser nachher auch
> anschauen soll?

Vielen Dank Nicolas für Dein Interesse. Der Grund für das Einführen der 
SSI war, daß so viel leichter zu erreichen ist daß der Kopf der Dateien 
einheitlich ist.

Der oberste Kopfteil ist ein SSI-Teil. Dieser enthält einen weiteren 
SSI-Teil. Die Fußzeile ist ein SSI, die Navigation rechts usw.

Auf diese Art und Weise kann ich die Seiten rascher pflegen und 
konsistent halten. Ohne SSI war das ein Kraftakt, weil jede Änderung in 
allen 450 Dateien gemacht werden musste. Das wird so weitgehend 
vermieden.

Ein anderer Grund ist daß bei Änderungen nun meist nicht mehr so viele 
Dateien neu online gestellt werden müssen. Beim Jahreswechsel änderte 
ich früher den Copyright-Vermerk unten in den Dateien. Dann musste ich 
alle neu hochladen. Nun ist es nur noch die kleine Fußzeile die ich neu 
hochlade. Der Server setzt diese automatisch in die Dateien ein.

Das sind schon große Vorteile.

Die Nachteile sind jedoch:
- mein Programm stellt die Dateien beim Bearbeiten nicht mehr so dar wie 
es auf dem Server dann aussieht. Auch die Vorschau im Browser klappt 
leider nicht mehr. Vielleicht wäre das mit einem neueren Dreamweaver 
besser. Nur müsste ich dazu Win7 installieren. Das möchte ich erst mal 
vermeiden.

> Warum die Unterscheidung zwischen Online- und Offline-Version?

Die Offline-Version ist viel schneller als die Online-Version. Da doch 
einiges eingebunden ist auf diesen Seiten macht es schon einen 
Unterschied in der Performance. Nicht jeder ist ständig im Netz. So 
besteht die Chance das auch ohne Netz ansehen zu können. Manche nutzen 
das.

von Nicolas S. (Gast)


Lesenswert?

Matthias W. schrieb:
> Der oberste Kopfteil ist ein SSI-Teil. Dieser enthält einen weiteren
> SSI-Teil. Die Fußzeile ist ein SSI, die Navigation rechts usw.
>
> Auf diese Art und Weise kann ich die Seiten rascher pflegen und
> konsistent halten. Ohne SSI war das ein Kraftakt, weil jede Änderung in
> allen 450 Dateien gemacht werden musste. Das wird so weitgehend
> vermieden.
>
> Ein anderer Grund ist daß bei Änderungen nun meist nicht mehr so viele
> Dateien neu online gestellt werden müssen. Beim Jahreswechsel änderte
> ich früher den Copyright-Vermerk unten in den Dateien. Dann musste ich
> alle neu hochladen. Nun ist es nur noch die kleine Fußzeile die ich neu
> hochlade. Der Server setzt diese automatisch in die Dateien ein.
>
> Das sind schon große Vorteile.

Den Grund verstehe ich.

Matthias W. schrieb:
> Die Offline-Version ist viel schneller als die Online-Version. Da doch
> einiges eingebunden ist auf diesen Seiten macht es schon einen
> Unterschied in der Performance. Nicht jeder ist ständig im Netz. So
> besteht die Chance das auch ohne Netz ansehen zu können. Manche nutzen
> das.

Den Grund verstehe ich auch.

Aber dadurch, daß die zweite Version existieren soll mußt die "fertigen" 
HTML-Dateien (wie sie der Leser als Offline-Version bekommt) sowieso 
"offline" erzeugen- was Du mit Deinem C-Programm machst.

Warum erzeugst Du dann auf Deinem Server die gleichen Dateien aus den 
gleichen Quellen noch einmal - wo sie doch Offline schon existieren 
müssen?

Matthias W. schrieb:
> Beim Jahreswechsel änderte
> ich früher den Copyright-Vermerk unten in den Dateien. Dann musste ich
> alle neu hochladen. Nun ist es nur noch die kleine Fußzeile die ich neu
> hochlade. Der Server setzt diese automatisch in die Dateien ein.

Da hat das "einfach Hochladen der neuen Dateien" natürlich eine andere 
Größe - aber ist der Unterschied so groß, daß er die Arbeit, zwei 
Versionen jeder HTML-Datei vorhalten zu müssen rechtfertigt?

von Nicolas S. (Gast)


Lesenswert?

P.S.: Mein eigenes "Webprojekt" kommt an Deines von Größe und Anspruch 
nie heran. Ich hatte damals beim Start keine Möglichkeit auf 
serverseitige Scripte- also erzeuge ich einfach alle HTML-Dateien 
offline mit einem Matlab-Skript- vermutlich die Entsprechung zu Deinem 
C-Programm. Damit sind die Offline-Version auf meinem PC und die 
Online-Version komplett identisch.

Es war auch bei mir eine bewußte Entscheidung, die Seiten ohne Tricks 
herunterladbar zu machen.

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> Ich hatte damals beim Start keine Möglichkeit auf
> serverseitige Scripte - also erzeuge ich einfach alle HTML-Dateien
> offline mit einem Matlab-Skript- vermutlich die Entsprechung zu Deinem
> C-Programm.

das ist auch ein Weg. Meist führen ja mehrere Wege führen zum Ziel.

> Es war auch bei mir eine bewußte Entscheidung, die Seiten ohne Tricks
> herunterladbar zu machen.

das macht Sinn. Ich bin erst mal froh diese Umbauphase an der Seite 
hinter mir zu haben. Leider gibt es noch das Link-Problem. Viele Links 
sind mittlerweile weg. Und so laufen die Klicks ins Leere. Viele Seiten 
hatten ich abgespeichert. Nun könnte ich anstelle eines toten Links eine 
txt-Datei hinterlegen wo der alte Link vermerkt ist. Wenn man Zeit hat 
kann man dann versuchen die Dateien zu ergänzen mit Links auf 
archive.org etc. Bei 10000 defekten Links kann da leicht ein Jahr weg 
sein. Das klingt wenig lohnend.

von Nicolas S. (Gast)


Lesenswert?

Es gab ein Werkzeug, um tote Links zu suchen (funktioniert offline). Sie 
stehen dann in einer Liste, die Du sicher mit Deinem C-Programm auch 
automatisch bearbeiten könntest.

Ich schaue heute abend nach, wie dieses Programm hieß (wenn nicht vorher 
schon jemand im Forum die Antwort schreibt).

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

http://validator.w3.org/checklink z.B.
HTTrack kann das auch... hilft ihm aber vermutlich nicht viel wenn er 
gerne auf den Inhalt verlinkt hätte. Manches findet sich noch im Google 
Cache.

von Nicolas S. (Gast)


Lesenswert?

P.S.: Generell ist es ja auch kein Problem, so ein Programm selbst zu 
schreiben, wget sei dank. Aber es gibt soetwas definitiv schon.

von Nicolas S. (Gast)


Lesenswert?

Guten Morgen,
das Finden der toten Links ist ja nur der erste Schritt. Das ginge 
automatisch.

Zweiter Schritt wäre das Testen, ob der tote Link bei archive.org ein 
Pendant hat. Das ginge auch automatisch.

Im dritten Schritt würden die Ersatz-Links in der eigenen Website mit 
dem entsprechenden Hinweis ersetzt. Das ginge auch automatisch.

Am Ende müßte man sich nur mit den übrigen Links beschäftigen, die tot 
sind und nicht bei Archive.org hinterlegt sind. Ich gehe mal davon aus, 
daß die Zahl bedeutend kleiner ist.

Viele Grüße
Nicolas

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> Es gab ein Werkzeug, um tote Links zu suchen (funktioniert offline). Sie
> stehen dann in einer Liste, die Du sicher mit Deinem C-Programm auch
> automatisch bearbeiten könntest.

das ist eine gute Idee. Ich könnte so erst mal die Links die nicht mehr 
gehen - also auf einen Fehler laufen durch txt-Dateien wo ich den Link 
dann einbette ersetzen lassen. Diese txt-Dateien könnte ich automatisch 
durchnumerieren lassen von 00000.txt bis 99999.txt. Mehr Links machen 
wohl keinen Sinn.

> Ich schaue heute abend nach, wie dieses Programm hieß (wenn nicht vorher
> schon jemand im Forum die Antwort schreibt).

vielen Dank Nicolas. Mir ist nur nicht klar wie das offline gehen soll. 
Es müsste doch eine Prüfung erfolgen ob die Seite im Netz noch besteht.

Um es sauber zu machen müsste man jeden Link selbst ansehen und 
überlegen ob man suchen will nach einer Alternative oder die Kopie in 
archive.org oder google-Cache nutzen will. Ggf. könnte man ein pdf 
erstellen von der Seite und das auf einem Datenträger anbieten.

Der Aufwand für all das erscheint immens. Ist die Frage wer einen Nutzen 
davon hätte und bereit wäre sich am Aufwand zu beteiligen. Als 
one-man-show ist das schwer.

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> P.S.: Generell ist es ja auch kein Problem, so ein Programm selbst zu
> schreiben, wget sei dank. Aber es gibt soetwas definitiv schon.

ich bekam mal einen Hinweis auf ein existentes Tool. Der Report des 
Tools war jedoch sehr lang und für mich schwer zu verstehen. Daher 
verfolgte ich das erstmal nicht weiter.

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> das Finden der toten Links ist ja nur der erste Schritt. Das ginge
> automatisch.

Danke Nicolas. Das stimmt. Manchmal wurde jedoch die Seite aufgegeben 
und es kommt stattdessen so eine Werbeseite. Das sollte man erkennen.

> Zweiter Schritt wäre das Testen, ob der tote Link bei archive.org ein
> Pendant hat. Das ginge auch automatisch.

leider ist das nicht so einfach. Seiteninhalte ändern sich. Nicht immer 
findet archive automatisch was. Oft musste ich mehrere Fassungen ansehen 
und mich dann für eine entscheiden. Bei meiner eigenen Seite gab es 
jahrelang fast jeden Monat einen neuen Stand.

http://web.archive.org/web/*/http://www.mweisser.50g.com zeigt daraus 
nur 57 Schnappschüsse mit sehr großen Löchern ab 2005.

Ich verwies auf Inhalte von www.in-for-mationen.de/InfoTexte. Die Seite 
verschwand und war anfangs noch in archive.org verfügbar. Dann setzte 
jemand in der robots.txt einen Leseschutz: Page cannot be crawled or 
displayed due to robots.txt. So kann man heute nicht mehr zugreifen. Was 
mache ich mit solchen Seiten?

> Im dritten Schritt würden die Ersatz-Links in der eigenen Website mit
> dem entsprechenden Hinweis ersetzt. Das ginge auch automatisch.

das geht sicher.

> Am Ende müßte man sich nur mit den übrigen Links beschäftigen, die tot
> sind und nicht bei Archive.org hinterlegt sind. Ich gehe mal davon aus,
> daß die Zahl bedeutend kleiner ist.

ja. Am Ende sind das weniger.

Mir wird klar daß man um es gut zu machen den Verstand nutzen muss. 
Automatisch geht nur manches. Verweise auf Inhalte auf meiner Festplatte 
sind automatisch schwer machbar. Manchmal mag es auch Schreibfehler 
geben. Manche Links erscheinen nicht mehr so wichtig. Das ist ein großes 
arbeitsintensives Feld. Die Beschäftigung damit kostet viel Zeit - 
bietet aber auch die Chance für substanzielle Verbesserung. Nur wer 
finanziert das alles? Seit 13 Jahren stemme ich das alleine.

Viele Grüße
Matthias

von Matthias W. (matt007)


Lesenswert?

Läubi .. schrieb:
> Manches findet sich noch im Google Cache.

Vielen Dank für den Hinweis Läubi !

von Nicolas S. (Gast)


Lesenswert?

Ich hatte den Zettel, daß ich das Linksuchtool noch suchen wollte doch 
tatsächlich ungelesen in der Hosentasche von der letzten Woche. Es hieß 
"Xenu". http://home.snafu.de/tilman/xenulink.html

von Matthias W. (matt007)


Lesenswert?

Nicolas S. schrieb:
> Es hieß "Xenu". http://home.snafu.de/tilman/xenulink.html

Vielen Dank Nicolas !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.