 |
 |
 |
 |
 |
 |
 |
            |
 |
 |
 |
 |
 |
 |
 |
|
 |
 |
 |
 |
 |
 |
 |
 |
 | DirectoryDump - Ordnerinhalte speichern |
|
|
|
|
DirectoryDump ist ein C#-Konsolenprogramm, welches mit dem dotnet-Framework 1.1 kompiliert ist. Die Unicode-Ausgabedatei dbDoc.txt ist prinzipiell mit der Ausgabe des DOS-Dir identisch, aber bei mehr als einer Extensiondefinition erheblich schneller, da jede Ordnerstruktur nur einmal durchsucht wird.
Die zip-Datei enthält neben der exe-Datei das Klassenobjekt im Quellcode.
|
Anwendungsgebiet
|
Das Programm DirectoryDump.exe findet in Stapeldateien (batch) auf FileServern Verwendung, um die vorhandenen Dateien von verschiedenen Anwendergruppen separat zu indizieren, um einen Client-Rechner nicht zu belasten (keine Wartezeit).
Die Ausgabedatei dbDoc.txt kann durch andere Programme weiter verarbeitet werden. Dieses Feature ist gerade dann sinnvoll, wenn die Windows-Suchfunktion im Netzwerk abgeschaltet ist. Wegen der deutschen Umlaute erfolgt die Ausgabe im Unicode-Format.
Die Indizes dienen einem Desktopsuchprogramm, z.B. dbDoc, als sehr schnelle Zugriffsmöglichkeit (300000 Dateinamen in weniger als einer Sekunde) auf die benötigten Daten.
Das Programm dbDoc.exe befindet sich zur Zeit in der Betaphase.
|
Prämissen
|
 |
Einsatz als Kommando in Stapeldateien
|
 |
bestimmte Dateiextensions werden in einem einzigen Aufruf definiert
|
 |
es werden nur Verzeichnisse ausgegeben, die auch Dateien enthalten
|
 |
der Name der Ausgabedatei ist nicht konfigurierbar
|
|
Format
|
DirectoryDump.exe Parameter1 Parameter2 Parameter3
In Parameter1 wird immer der jeweilige Ordnername erwartet. Alle Unterverzeichnisse werden ebenfalls durchsucht. Enthält der Ordnername Leerzeichen, ist der Parameter in "Anführungszeichen" asc34 zu setzen.
In Parameter2 kann die Option /init gesetzt werden, um eine vorhandene dbDoc.txt zu löschen. Ist diese Option nicht angegeben, dann werden die neuen Daten an die Ausgabedatei angehängt (append mode) und die Dateierweiterungen stattdessen als Parameter2 definiert.
Im letzten Parameter sind die gewünschten Dateiextensions zu definieren. Die Dateierweiterungen sind einzeln mit Punkt ohne Leerzeichen anzugeben. Eingeleitet wird die Option mit /ext
Beispiele: DirectoryDump.exe "C:\Programme" /init /ext.doc.xls.txt.htm.ppt.pdf DirectoryDump.exe "C:\Programme" /ext.exe.mdb.lnk.ora
|
Beispiel einer dbDoc.txt
|
Verzeichnis von f:\_global
02.11.2007 10:37 6.526 Access.cls
06.09.2007 15:56 14.428 ADO.cls
27.10.2006 15:02 2.748 Array.cls
26.07.2006 13:19 4.243 CPU.cls
11.03.2006 21:41 977 Dialog.bas
11.03.2006 21:41 21.516 Dialog.cls
13.08.2006 22:49 5.485 DirSensor.cls
08.01.2008 12:02 13.885 Disk.cls
08.04.2004 14:35 943 Error.bas
01.10.2007 15:04 17.726 File.cls
25.03.2006 12:35 3.633 FileTime.cls
22.07.2005 11:10 14.518 FTP.bas
01.08.2005 16:03 12.646 FTP.cls
07.03.2006 14:00 20.297 Get.cls
01.02.2007 17:47 5.220 GetIP.cls
06.03.2007 10:19 13.911 Grid.cls
22.06.2007 14:28 17.949 HiLite.bas
02.08.2006 13:47 6.597 Interpreter.cls
21.08.2007 10:05 16.044 IP.cls
03.07.2006 17:22 8.166 Krypto.cls
25.01.2008 17:50 16.796 Lesen.cls
07.05.2005 20:10 11.095 Lizenz.cls
13.10.2006 09:55 15.522 MailCDO.cls
13.10.2006 10:24 10.811 MailFile.cls
12.09.2007 11:12 11.174 Move.cls
09.08.2007 12:14 11.076 Network.cls
19.07.2007 17:23 1.388 NetworkUnit.cls
31.03.2000 17:03 1.534 Ontop.bas
23.11.2007 16:39 4.030 Printer.cls
18.10.2007 14:24 3.148 Progress.cls
27.07.2007 14:10 12.853 Prozessliste.cls
22.02.2006 15:54 18.127 Schreiben.cls
12.12.2005 00:04 3.251 Split.cls
01.04.2006 23:48 3.599 SQL.cls
22.08.2007 14:35 1.816 SQLStatement.cls
10.04.2004 21:32 5.435 String.cls
14.02.2007 18:14 4.421 TempInternetFiles.cls
11.11.2005 11:02 3.004 Tray.cls
04.07.2006 16:34 3.589 TreeView.cls
22.02.2006 19:20 6.088 Update.cls
09.04.2007 10:59 24.491 Variable.cls
30.06.2006 15:04 5.175 Watchdog.cls
27.07.2005 20:37 4.610 XML.cls
29.09.2006 16:27 1.919 XMLvar.cls
07.03.2005 20:11 14.580 Zip.bas
23.01.2007 16:28 4.740 Zip.cls
Verzeichnis von f:\_global\JPEG
13.02.2005 17:03 12.448 DIBSection.cls
09.02.1999 10:46 137.728 IJL10.DLL
13.02.2005 16:06 10.953 IntelJPEGLibrary.bas
23.03.2005 18:57 13.996 Screenshot.cls
|
Quellcode
|

|
|
|
// DirectoryDump - Konsolenprogramm zum Auslesen von Ordnerinhalten // Format: DirectoryDump.exe /init /ext.doc.xls // dotnet Framework 1.1 using System; using System.IO; using System.Collections;
namespace DirectoryDump { public class DirDumper { public static void Main(string[] args) { if (args.GetUpperBound(0) == -1) { // es wurden keine Parameter übergeben, dann // den aktuellen Ordner nach allen Dateien durchsuchen args = ".".Split(new Char [] {' '}); }
// Parameter 1 string sDirectory = args[0];
// Parameter 2; optional FileMode OpenMode = FileMode.Append; // Standard: Daten an bestehende Datei anhängen if (args.GetUpperBound(0) > 0) { if (args[1].ToLower() == "/init") OpenMode = FileMode.Create; // neue Datei erstellen, ggf. überschreiben }
// Parameter 2+3: Dateierweiterungen ermitteln; Beispiel: /ext.txt.doc.xls string sFileExt = ""; // alle Dateien suchen for (int i = 1; i < 3; i++) { if (args.GetUpperBound(0) >= i) { if (args[i].Substring(0, 5).ToLower() == "/ext.") { sFileExt = args[i].Substring(4).ToLower() + "."; // Punkt am Ende des String anhängen break; } } }
DirectoryInfo current = new DirectoryInfo("."); // aktuelles Programmverzeichnis string sFilenameOut = current.FullName + "\\dbDoc.txt"; // Ausgabedateiname if (sDirectory == ".") { sDirectory = current.FullName; // falls kein Parameter angegeben wurde }
try { FileStream fsout = File.Open(sFilenameOut, OpenMode, FileAccess.Write, FileShare.ReadWrite); StreamWriter swout = new StreamWriter(fsout, System.Text.Encoding.Unicode); //.UTF8
GetDirectoryInfo(sDirectory, sFileExt, swout);
try { swout.Flush(); fsout.Flush(); } catch(IOException fe) { Console.WriteLine("Flush: " + fe.Message); } try { swout.Close(); fsout.Close(); } catch(IOException fe) { Console.WriteLine("Close: " + fe.Message); } try { swout = null; fsout = null; } catch(IOException fe) { Console.WriteLine("null: " + fe.Message); } } catch(IOException fe) { Console.WriteLine("Open: " + fe.Message); } //Console.WriteLine("Return drücken..."); //Console.Read(); } // ---- Programmende ----
// rekursive Funktion, Ordner und Dateien sortiert einlesen private static void GetDirectoryInfo(string sDirectory, string sFileExt, StreamWriter swout) { SortedList colDir = new SortedList(); // Ordnerliste SortedList colFile = new SortedList(); // Dateiliste
try { DirectoryInfo current = new DirectoryInfo(sDirectory); try { FileSystemInfo[] content = current.GetFileSystemInfos();
if (sFileExt.Length == 0) { // alle Dateien suchen foreach (FileSystemInfo entry in content) { if (entry is DirectoryInfo) colDir.Add(entry.Name, entry.FullName); else Add2FileList(colFile, entry); } } else { // nur bestimmte Dateien suchen foreach (FileSystemInfo entry in content) { if (entry is DirectoryInfo) colDir.Add(entry.Name, entry.FullName); else { int p = entry.Name.IndexOf("."); // jede Datei auf eine gültige Extension prüfen if (p > -1) { // diese Datei enthält eine Extension string sExt = entry.Name.Substring(p).ToLower() + "."; if (sFileExt.IndexOf(sExt) > -1) { // .ext. suchen Add2FileList(colFile, entry); // Extension ist gültig } } } } } current = null; content = null; } catch(IOException fe) {Console.WriteLine("GetFileSystemInfos: " + fe.Message); } } catch(IOException fe) { Console.WriteLine("DirectoryInfo: " + fe.Message); }
if (colFile.Count > 0) { // Dateien sind im Ordner vorhanden, dann auch den Ordnernamen ausgeben //-Console.WriteLine(strDirectory); swout.WriteLine(" Verzeichnis von " + sDirectory); foreach (string sZeile in colFile.Values) { swout.WriteLine(sZeile); } } colFile = null;
// alle im Ordner enthaltenen Unterverzeichnisse jetzt durchsuchen foreach (string sPfad in colDir.Values) { GetDirectoryInfo(sPfad, sFileExt, swout); } colDir = null; }
// vollständige Zeile in sortierte Dateiliste füllen private static void Add2FileList(SortedList colFile, FileSystemInfo entry) { FileInfo fi = new FileInfo(entry.FullName); string[] split = fi.LastWriteTime.ToString().Substring(0, 16).Split(new Char [] {' '}); string sFileSize = fi.Length.ToString("' '#,###,###,###,##0"); colFile.Add(entry.Name, split[0] + " " + split[1] + sFileSize.Substring(sFileSize.Length - 18, 18) + " " + entry.Name); } } }
|
|
BackUp & Copy - Verzeichnisse sichern RenW2d - web to date umbenennen
|
|
 |
 |
 |
 |
|
 |
 |
 |
      |
 |
 |
 |
|
|