Hallo Darius,
richtig, es ist gut zu wissen, bisher habe ich foreach meist nur dann verwendet, wenn es im Ausgangsprogramm so wahr. Selber hantiere ich fast nur mit for, if/else if/else und manchmal mit while und do/while - das war es dann fast schon wieder. (1 oder 2x habe ich mich an etwas rekursives gewagt, brauchte dann aber fast immer sofort Hilfe. Ich beschäftige mich erst seit dem 2. Januar mit dem Schreiben kleiner Hilfsprogramme.)
Die Stellen, die dich interessieren sind vermutlich diese:
string[] s = System.IO.File.ReadAllLines(@"C:\Ausgabe\JHOVE_ergebnis\Jhove_PDF_ganzerOrdner");
zahlpdf = 0;
for (pdf = 0; pdf < len; pdf++)
{
if (s[pdf].Contains("Format: PDF"))
zahlpdf++;
}
Ich habe diesen Code-Schnipsel mehrfach verwendet (vermutlich könnte ich mal über eine Funktion nachdenken), und es kommt u. a. hier erneut vor:
for (i = 0; i < len; i++)
{
if (s[i].Contains("ErrorMessage"))
{ ....
Ich könnte auch die ganze Datei posten, allerdings sehe sogar ich, dass man sie an vielen Stellen noch optimieren kann, ich habe erst heute Vormittag damit begonnen.
Aber wenn du möchtest, mache ich das morgen noch, trotz all der "buggy" und "leggy"-Stellen.
Jetzt werde ich bald Feierabend machen (mein Gehirn fährt allmählich in den Sofa-Modus), aber ich werde sicher im Laufe der Woche noch daran arbeiten.
Und falls du mit Beispieldatei die Textdatei meinst, die ich untersuche - wie hänge ich die hier an? Mein Format-Erkennungstool kennt das Format nicht, es ist kein txt-Format oder etwas ähnliches und hat auch keine Extension. Jetzt bin ich allmählich auch neugierig, denn ich beschäftige mich schon etwas länger mit Dateiformaten.
Viele freundliche Grüße, Yvonne
Alter Schwede. Das ist der WTF-Code der Woche. Das ist völlig absurd und falsch was Du da machst.
Kannst Du mal eine Single-Thread-Lösung dessen posten, was Du eigentlich damit berechnen willst?
Oder Eingabe-Ausgabe-Beispiele aufzeigen?
Das ist in der Form nicht zu reparieren und muss neu geschrieben werden. Wenn ich genau weiß was zu tun ist, finde ich übers WE bestimmt mal etwas Zeit. Vorausgesetzt da lässt sich überhaupt etwas parallelisieren. Bisher schreibst Du ja nur in Dateien und von aufwändigen Berechnungen sehe ich nichts.
Form1 ruft mit .Show() Form2 über einen Menüpunkt auf. Form1 ist TopMost = false und Form2 TopMost = true festgelegt.
Im Konstruktor von Form2 wird die Location von Form1 übernommen und die Location von Form2 angepasst.
Jetzt suche ich einen Mechanismus zur weiteren Anpassung beim Event Form1_LocationChanged(...)
edit: this.Dock = Dockstyle.Left macht schon mal das wesentliche. Es stört nur, dass die Menüleiste der Parent-Form überblendet wird.
Hmm, was denn erklären?
Eine Herleitung kannst Du ergoogeln. Falls die Notation unklar ist, so sieht das in Code aus:
float Area(List<PointF> p)
{
float area = 0;
int N = p.Count;
for (int i = 0; i < N; ++i)
area += (p[i].Y + p[(i + 1) % N].Y) * (p[i].X - p[(i + 1) % N].X);
return 0.5f * Math.Abs(area);
}
(ungetestet)
loks schrieb:
1. Du prüfst im Ctor nicht ob das File existiert bzw. zugegriffen werden kann. -> Möglicher Laufzeitfehler
Das tue ich bereits bei der Erzeugung der Liste in der Hauptklasse und muss ich dort auch tun, weil wenn das Verzeichnis dort nicht existiert würde ich einen Fehler bekommen, wenn ich in die Subverzeichnisse davon gehe. Oder sollte man das zweimal machen (beziehungsweise Zugriff erneut testen, da der Zeitpunkt leicht abweicht von der ersten Prüfung)?
loks schrieb:
6. Du erzeugst unnötig mehrfache Instanzen von MD5 (Md5.Create())
OK, ich erzeuge nun eine Instanz und verwende diese:
MD5 md5 = new MD5CryptoServiceProvider();
byte[] md5Hash = md5.ComputeHash(FileCheck);
loks schrieb:
7. Deine Operatoren prüfen ebenfalls nicht auf null -> möglicher Laufzeitfehler
Was soll ich in dem Fall machen, falls ein Wert null ist?
Ich kann ja keinen boolean zurückgeben. Also was würde man von einem Programm erwarten? Eine Exception?
loks schrieb:
Zusätzliche Minuspunkte für schlechte Naming Convention:
Unterstrich ist entfernt im Klassennamen. Das mit dem Unterstrich vor der Variable hat mir ein Ausbilder gezeigt und habe ich schon zigtausendmal im Netz gesehen. Aber ich werde es mir merken.
Dann liegt jetzt das Problem nur noch in der Verwendung des HashSets stimmts?
HashSet<ImageFile> hashset = new HashSet<ImageFile>();
foreach (ImageFile imgfile in imgfiles)
{
if (...)
lbDuplikate.Items.Add(imgfile.ToString());
Application.DoEvents();
}
Ich weiß nun nicht, wie ich hier den Operator == einsetzen soll ohne die Hashset ebenfalls nochmal zu druchlaufen, was ich ja nicht mehr tun sollte/muss.
@oh-ihr-götter
Dem wiederspreche ich hiermit strikt. Der Setter ist quasi eine Methode, die aufgerufen wird um einen Wert zu setzen. Für spezielle Behandlung, zum Beispiel die Prüfung ob die Datei existiert deren Pfad übergeben wurde, kann der Setter sehr wohl verwendet werden.
Das Anlegen des Files allerdings hätte ich in eine eigene Methode ausgelagert.
hustbaer schrieb:
EDIT:
Nö, ich bin doof
Ich ziehe meine Bedenken zurück.
Das Programm das "elevated" läuft läuft ja trotzdem in der selben Session ( GetCurrentProcessId -> ProcessIdToSessionId ) - vermute/behaupte ich mal. Wenn man sich genau diese Session dann aus der Liste die man über LsaEnumerateLogonSessions/LsaGetLogonSessionData bekommen hat raussucht, dann sollte das OK sein.
So siehts aus
Läuft alles wunderbar.
hustbaer schrieb:
Man bekommt dann zwar nicht den Account mit dem das Programm gestartet wurde, aber zumindest den mit dem sich derjenige der das Programm gestartet hat ursprünglich eingeloggt hat. Was vermutlich gut genug ist.
Genau das wollte ich ja.
fragr schrieb:
Damit kann ich eine JS-Funktion aufrufen, ja.
Aber wie kann ich das auf einer bestimmten Website machen?
Dort, im Beispiel, wurde das Script als string hinterlegt.
Was aber, wenn diese auf einer Website vorliegt?
Dann bist du angeschissen. Weil JavScript Code der auf Webseiten steht erwartet dass die Webseite als DOM vorliegt.
D.h. du bräuchtest als erstes mal ne komplette HTML DOM implementierung, und müsstest diese für JavScript zugänglich machen.
=> vergiss es
Vielen Dank. Tatsächlich war im Pathseperator ein Wert eingetragen, der zu dem Fehler führte. Der Fehler lag nur vielmehr daran, dass ich nicht wusste, dass dieser eine Auswirkung hatte.
Nein. Auch mit der Konsole bekomme ich im Visual Studio keine verbindung hin.
Aber ich habe eine andere Lösung gefunden. nuget package mit externem Tool herunterladen. Im Visual Studio einen weiteren Pfad hizufügen der aber nicht auf nuget.org verweist sondern auf die lokale Platte. Dann hier das gewünschte Paket auswählen und installieren.