Laden...

Forenbeiträge von mrdjoker Ingesamt 125 Beiträge

14.06.2009 - 12:07 Uhr

Ich habe eine richtig geniale Seite zu dem Thema gefunden:
Regular Expressions Libary

Gruß
mrdjoker

14.06.2009 - 12:05 Uhr

Regex ist nicht kompliziert, sondern eher trivial einfach. Wenn du dich auf Regex einlässt, wirst du das schnell merken.

Du hast sicher Recht.
Doch wenn man sich noch nie damit beschäftigt hat, sehen die vielen Zeichen sehr cryptisch aus.
Als Leihe verstehe ich z.B. nicht, warum die folgende Zeile mir sämtliche Links zurückgibt:

 ^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$

Übrigens gibts hier eine nützliche Seite für Leihen:Regular Expressions Libary

13.06.2009 - 18:10 Uhr

Ja es ist die erste (und einzige) Festplatte.

OK, kann man nichts machen.
Ich werde mir noch heute eine externe Platte holen, damit ich regelmäßig Backups machen kann. Sowas passiert mir nicht noch einmal.

Trotzdem danke für deine Hilfe ujr.

13.06.2009 - 11:19 Uhr
DateTime dateTime = DateTime.Parse(s.Substring(start, end - start));  

Genau so eine Zeile habe ich gesucht, Danke!

Ehrlich gesagt sind mir RegEx zu kompliziert.
Ich benutze die nur, wenn ich Links aus einer Webseite haben möchte und dass auch nur, weil es in Nützliche Regex-Pattern bereits fertige Lösungen gibt.

13.06.2009 - 10:42 Uhr

Hallo liebe myCharp Community,

wie kann ich am geschicktesten das Datum aus einem String auslesen?
der String ist immer wie folgt aufgebaut:
Berlin 10-10-2008 Bild1
Berlin 10-10-2008 Bild2
London 01-05-2007 Bild1

Da das Datum immer an der gleichen Stelle ist, könnte ich natürlich die Zahlen in Integer konvertieren
und anschließend mit new DateTime(jahr,monat, tag) das Datum zurückgeben.

Was mir an dieser Lösung nicht gefällt ist, dass sich der Quellcode aufbläht, da ich gegebenenfalls auch auf Berlin "10-10-2008 Bild200" reagieren muss.

Habt ihr eine bessere Lösung für mich?
Gruß
mrdjoker

13.06.2009 - 00:09 Uhr

Ach menno,

wenn ich auf die Festplatte mit cfdisk /dev/sda zugreifen möchte, kommt folgender Fehler:
FATALER FEHLER: Bäschädigte Partition 2: Partition endet im letzten teilweisen Partitions-Zylinder

wenn ich cfdisk /dev/sda1 eingebe (Partition, die vorher verschlüsselt war):
FATALER FEHLER: Beschädigte primäre Partition 0: Partition fängt hinter dem Ende der Festplatte an

wenn ich cfdisk /dev/sda3 eingebe (verschlüsselte Partition):
Unbekannter Partitionstabellentyp

wenn ich cfdisk /dev/sda5 eingebe (Windows Partition)
FATALER FEHLER: Beschädigte primäre Partition 0: Partition fängt hinter dem Ende der Festplatte an

Die Datenrettung sieht nicht so rosig aus..

11.06.2009 - 06:31 Uhr

GParted ist echt umfangreich, nur leider kann auch dieses Programm nicht einfach so den Typ auf RAW stellen.
Ich werde mich wohl damit abfinden müssen, dass die Daten weg sind..

09.06.2009 - 20:49 Uhr

Ich glaube zwar nicht aber es könnte sein das TestDisk dir weiterhelfen kann. Habe ich schon getestet, hat leider nichts gebracht.
Welche Änderungen wurde denn durchgeführt? Gab es irgendwelche Fehlermeldungen? Es kam keine Fehlermeldung, die Partitionsgröße ist gleich geblieben und D hatte mit einmel NTFS als Dateiformat.

Man muss doch irgendwie an die Partitionstabelle kommen?!

09.06.2009 - 20:30 Uhr

Hallo zusammen,

ich habe eine 250GB in 3 Partitonenen aufgeteilt:
C enthält Windows XP
D & E sind mit DriveCrypt komplett verschlüsselt (vertrauliche Benutzerdaten)

Nun wollte ich mit Paragon Partion Manager die Partition C verkleinern, nur leider hat das nicht geklappt.
Stattdessen wird mir jetzt Partition D als NTFS angezeigt und nicht mehr wie bei DriveCrypt üblich als RAW.
Da die Partition nicht formatiert wurde, müssten die Daten auf D noch vorhanden sein.

Die Frage ist nun, ** wie kann ich in der Partitionstabelle den Typ von NTFS auf RAW umstellen**,
damit DriveCrypt die Partition wieder als verschlüsselt erkennt?

Hoffentlich könnt ihr mir helfen.. =)
Besten Dank schon mal!

30.05.2009 - 15:49 Uhr

Danke für die Antwort.

Ich melde mich noch einmal, wenn ich es hinbekommen habe.

30.05.2009 - 12:40 Uhr

Hallo zusammen,

ist es möglich zu überprüfen, ob die Netzwerkverbindung gerade benutzt wird?
Ich möchte nämlich die Netzwerkverbindung trennen, wenn sie 5 Minuten lang nicht verwendet wurde.

Hoffentlich geht das auch ohne C++

Gruß
mrdjoker

30.05.2009 - 12:34 Uhr

Du kannst die CPU Auslastung auch ohne WMI auslesen:


public class CPU
{
    private System.Diagnostics.PerformanceCounter perfCounter;

    public CPU()
    {
        perfCounter = new System.Diagnostics.PerformanceCounter();
        perfCounter.CategoryName = "Processor";
        perfCounter.CounterName = "% Processor Time";
        perfCounter.InstanceName = "_Total";
    }
    // gbt die CPU Auslastung des Rechners zurück
    public int GetCpuLoad()
    {
        return Convert.ToInt16(perfCounter.NextValue());
    }
}

28.05.2009 - 23:20 Uhr

Poste doch mal die 93 Zeilen.
Wie sollen wir dir mit diesen wenigen Informationen helfen?

23.05.2009 - 10:49 Uhr

Diese Frage hatten wir schon zu hauf.

Suche mal unter Windows Hook!

Gruß
mrdjoker

16.05.2009 - 21:08 Uhr

Für ein Schul Projekt habe ich mir folgendes überlegt gehabt.

Ein Schulprojekt? Wie lange soll das denn laufen?
VideoStreaming mit Rechteverwaltung ist nicht in wenigen Stunden programmiert.

Wie man ein Video streamt findest du hier.

Die Verwaltung würde ich mittels Login via php regeln.

15.05.2009 - 13:36 Uhr

Hallo,

wenn du beide CPU Kerne nutzen willst, dann musst du auch 2 Threads erstellen.
Bei deinem Beispiel müsstest du die Rechenaufgabe (wenn möglich) in 2 Teilaufgaben zerlegen, die gleichzeitig abgearbeitet werden können.
Der eine Thread bearbeitet Teilaufgabe 1 und der andere Thread Teilaufgabe 2.

Ob du deine Berechnung logisch teilen kannst, wage ich allerdings zu bezweifeln.

Gruß
mrdjoker

13.05.2009 - 21:39 Uhr

Wo liegt denn dein Problem?

Ich stell dir mal exemplarisch ein bisschen Quellcode von mir zur Verfügung, evtl. hilfts dir ja weiter.


  foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
            {
                MyClass m = row.Tag as MyClass;
                if (m != null)
                {
                    propertyGrid1.SelectedObject = m;
                    break;
                }
            }

Gruß
mrdjoker

06.05.2009 - 22:42 Uhr

Dieses Problem hatte ich vor einiger Zeit auch.
Ich hatte damals keine Lösung gefunden und musste in Visio mein Klassendiagramm neu erstellen.

Gruß
mrdjoker

06.05.2009 - 22:28 Uhr

Hallo zusammen,

ich habe eine Klasse mit mehreren Felder:

        int zahl;
        String text;
        DateTime zeit;

Nun möchte ich alle Felder kapseln.
Bisher bin ich beim Visual Studio 2008 so vorgegangen:
zahl markiert - Umgestalten - Feld kapseln
test markiert - Umgestalten - Feld kapseln
zeit markiert - Umgestalten - Feld kapseln

Gibt es einen weg mit wenigen Klicks gleich alle Felder zu kapseln?

Bei Klassen mit 5 Feldern und mehr nervt die o.g. Methode extrem!

Hoffentlich könnt ihr mir helfen..

06.05.2009 - 19:15 Uhr

Hallo,

mit dem FileSystemWatcher kann man soweit ich weiß nicht ermitteln, wer eine Datei gelöscht hat.
Das geht aber mit Windows Bordmitteln.

Unter Sicherheit - Erweitert - Überwachung
kann man die Ordnerüberwachung einstellen.

Anschließend wird jeder Dateizugriff in der Ereignisanzeige gespeichert.

Gruß
mrdjoker

05.05.2009 - 22:08 Uhr

Was spricht denn gegen WMI?

OK, ich will mal nicht so sein:

using System;
using System.Runtime.InteropServices;

public class ZeitSetzen
{
 struct str_Zeit
  {
    public short Jahr;
    public short Monat;
    public short TagInDerWoche;
    public short Tag;
    public short Stunde;
    public short Minute;
    public short Sekunde;
    public short Millisekunde;
  }
   
  [DllImport("kernel32.dll", SetLastError=true)]
  static extern bool SetSystemTime(ref str_Zeit neueZeit);

  public  ZeitSetzen()
  {      
  }
  
  public void SetzeSystemzeit(DateTime NeueZeit)
  {
    str_Zeit Zeit = new str_Zeit();
    Zeit.Jahr = (short)NeueZeit.Year;
    Zeit.Monat = (short)NeueZeit.Month;
    Zeit.TagInDerWoche = (short)NeueZeit.DayOfWeek;
    Zeit.Tag = (short)NeueZeit.Day;
    Zeit.Stunde = (short)NeueZeit.Hour;
    Zeit.Minute = (short)NeueZeit.Minute;
    Zeit.Sekunde =(short)NeueZeit.Second;
    Zeit.Millisekunde = (short)NeueZeit.Millisecond;

    SetSystemTime(ref Zeit);
  }    
} 
05.05.2009 - 17:23 Uhr

Deine Methode braucht für 1 GB ca 2,5 Minuten, also länger als meine synchrone.

Ich habe da ein Verständnisproblem.

  1. Welchen Nutzen hat das asynchrone Schreiben, wenn sie länger als meine synchrone Methode dauert?
  2. Ist der Flaschenhals nicht die Festplatte?
    D.h. ich kann mit noch so vielen Threads schreiben, an der Geschwindigkeit wird sich nichts ändern.
05.05.2009 - 15:21 Uhr

Da gibts nicht viel zu zeigen, außer das File.Delete() auskommentiert ist.

        public static void DeleteFileAbsolutely(String Filename)
        {
            Byte[] byteArray = new Byte[8192];
            FileStream fs = new FileStream(Filename, FileMode.Open, FileAccess.Write, FileShare.None, 8, true);
            for (int i = 0; i < fs.Length; i += 8192)
                fs.Write(byteArray, 0, 8192);
            fs.Close();
            //   File.Delete(Filename);
        }

Ich könnte mir das Phenomen nur mit einer Energiesparfunktion meines Notebooks erklären.

05.05.2009 - 14:58 Uhr

Hat sich die Performance allein durch den Parameter UseAsync verdoppelt?

Das frage ich mich auch gerade.
Mir ist folgendes Phenomen aufgefallen:
Als Testdatei benutze ich ein 1 GB großes Video.
Um die Datei nicht ständig wieder neu zu kopieren, ist File.Delete(Filename); auskommentiert.

Wenn ich meine Methode mit der Originaldatei starte, so dauert sie doppelt so lange, als wenn ich sie ein 2. mal durchlaufen lasse.
Beim 2. Durchlaufen ist die Datei genauso groß wie das Original (absehen von wenigen Bytes), nur das eben der Inhalt aus lauter Nullen besteht.
Warum der 1. Durchlauf doppelt so lange dauert ist für mich vollkommen unlogisch.

Solange ich nicht die Originaldatei überschreibe, ist die Performance gleich geblieben!

05.05.2009 - 11:44 Uhr
[quote]
Weiterhin wärs noch toll, wenn man die Anzahl der Überschreibungen angeben könnte.

[quote]
einfaches Überschreiben reicht

Das asynchrone Schreiben hat die Performance verdoppelt!
Außerdem habe ich die Größe des Bytearrays an die Clustergröße angepasst:

        public static void DeleteFileAbsolutely(String Filename)
        {
            Byte[] byteArray = new Byte[8192];
            FileStream fs = new FileStream(Filename, FileMode.Open, FileAccess.Write, FileShare.None, 8, true);
            for (int i = 0; i < fs.Length; i += 8192)
                fs.Write(byteArray, 0, 8192);
            fs.Close();
            File.Delete(Filename);
        }
05.05.2009 - 00:21 Uhr

Nach einigen Tests, hat sich ergeben, dass es am besten ist, wenn man 10.000 Bytes mit einmal in die Datei schreibt.
Für 1GB, braucht mein Notebook 1 Minute und 45 Sekunden.
Wer noch Verbesserungen hat, immer her damit.

        public static void DeleteFileAbsolutely(String Filename)
        {
            int count = 10000;
            FileStream fs = new FileStream(Filename, FileMode.Open);
            for (int i = 0; i < fs.Length; i += count)
            {
                if ((i + count) > fs.Length)
                    count = (int)(fs.Length - i);
                fs.Write(new Byte[count], 0, count);
            }
            fs.Close();
            File.Delete(Filename);
        }
04.05.2009 - 22:27 Uhr

bei großen Dateien würde Dir sonst (vermutlich) der Speicher etwas knapp werden...

Wie könnte ich meine Methode für große Dateien optimieren?

// Edit

So besser?

        public static void DeleteFileAbsolutely(String Filename)
        {
            FileStream fs = new FileStream(Filename, FileMode.Open);
            for (int i = 0; i < fs.Length; i++)
                fs.WriteByte(new Byte());
            fs.Close();
            File.Delete(Filename);
        }
04.05.2009 - 22:04 Uhr

Hmmm - wie groß sind denn die Dateien, die Du so überschreiben willst?

Ungefähr 10KB.

//Edit

trotzdem löschen?

Stimmt,

 File.Delete(Filename);

fehlt noch am Ende

04.05.2009 - 21:46 Uhr

Wie ermittelt man in c# denn die Clustergröße?

Das Frage ich mich auch gerade.

einfaches Überschreiben reicht

Da stellt sich mir die Frage, warum bei Lösch-Tools immer die Anzahl der Überschreibungen einstellen kann?
Wahrscheinlich soll das nur professionell aussehen ohne jeglichen Nutzen.

Meine Methode sieht jetzt wie folgt aus:

 public static void DeleteFileAbsolutely(String Filename)
        {
                FileStream fs = new FileStream(Filename, FileMode.Open);
                new MemoryStream(new Byte[fs.Length]).WriteTo(fs);
                fs.Close();
                File.Delete(Filename);
        }
04.05.2009 - 21:02 Uhr

Hallo zusammen,

wenn man eine Datei löscht, dann wird bekanntlich nur der Verweis auf die Datei im Inhaltsverzeichnis des Datenträgers,
der File Allocation Table (FAT) gelöscht. Die Datei ist weiterhin vorhanden und kann leicht zurückgeholt werden.

Daher würde ich gerne eine Methode schreiben, die die Datei mehrfach überschreibt, sodass die Datei nicht wiederherrgestellt werden kann.

Hat jemand ein Idee, wie ich das ohne Fremdsoftware lösen kann?

Besten Dank

21.04.2009 - 22:59 Uhr

E-Mail-Adresse:

^[\w\.-]{1,}@[\w\.-]{2,}\.\w{2,3}$

deutsche Postleitzahl:

^d{5}$
21.04.2009 - 21:34 Uhr

du musst dem Backgroundworker sagen, dass er seinen Fortschritt melden soll:


backgroundWorker1.WorkerReportsProgress = true;

21.04.2009 - 10:25 Uhr

Rund um die Programmierung

Am besten postest du erstmal einen ordentlichen Titel, sonst überlesen die meisten User deinen Thread.

Guck doch einfach, was scheinbar der Assistent in deiner Anwendung an Code erzeugt hat.

gruß
mrdjoker

18.04.2009 - 21:04 Uhr

Stichwort: Konsumer-Producer Pattern

Hier gibts ein Beispiel dazu:
[Artikel] Multi-Threaded Programmierung

18.04.2009 - 20:36 Uhr

Hier der kleine Tipp:


timenow =  DateTime.Now.Ticks;

Gruß
mrdjoker

18.04.2009 - 20:29 Uhr

Danke schön für den Sourcecode.

Der XmlSerializer ist ja richtig genial!

Gruß
mrdjoker

17.04.2009 - 10:58 Uhr

Daran liegt es nicht, da wie oben schon beschrieben
Console.WriteLine("BackgroundWorker completed");
ausgegeben wird und somit der Prozess beendet ist.

17.04.2009 - 10:37 Uhr

eine solche Konstruktion ist witzlos

Da stimme ich dir voll und ganz zu.
Ich hatte den BackgroundWorker verwendet, da ich diesen bereits implementiert hatte und nicht extra eine neue Methode schreiben wollte.

@ujr
Deine Erklärung klingt absolut logisch. Daran wirds sicher liegen.
Das Environment.Exit(0) ist in der Form.Closed Methode natürlich überflüssig.

Gruß
mrdjoker

16.04.2009 - 23:18 Uhr

Ich weiß, dass Thread.Sleep alles andere als sauber ist, zumal der BackgroundWorker extra dafür da ist, damit die GUI nicht einfriert.
Da in meinem Fall das Programm beendet wird, kann die Gui ruhig für eine Sekunde einfrieren, das wäre mir egal..

Trotzdem verstehe ich nicht, warum der BackgroundWorker non stop beschäftigt ist.

Ich werde mir mal das Tutorial durchlesen, vielleicht lerne ich ja noch etwas..

//Edit

Genau so ein Tutorial habe ich schon immer gesucht! Danke

16.04.2009 - 22:07 Uhr

Hallo zusammen,

damit meine GUI nicht blockiert, habe ich aufwendige Prozesse in einen BackgroundWorker ausgelagert.
Wird mein Programm geschlossen, so soll vorher ein solcher Process ausgeführt werden:


 private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
        {
            backgroundWorkerDisconnect.RunWorkerAsync();
            while (backgroundWorkerDisconnect.IsBusy)
                System.Threading.Thread.Sleep(100);
            Environment.Exit(0);
        }

Der Prozess dauert höchstens eine Sekunden, aus irgendeinem Grund bleibt das Programm in der Thread.Sleep-Schleife hängen,
da der BackgroundWorker anzeigt, dass er beschäftigt ist.
Komischerweise wird noch nicht mal das RunWorkerCompleted aufgerufen.

Dabei bin ich mir 100%ig sicher, dass der Prozess abgearbeitet wurde, schließlich wird "BackgroundWorker completed" in der Konsole ausgegeben.


  private void backgroundWorkerDisconnect_DoWork(object sender, DoWorkEventArgs e)
        {
            Process p = new Process();
            p.StartInfo.FileName = "rasdial";
            p.StartInfo.Arguments = " /disconnect";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.WaitForExit();         
            Console.WriteLine("BackgroundWorker completed");
        }

Kann mir jemand auf die Sprünge helfen, warum das Programm nicht geschlossen wird und in der Schleife hängen bleibt?

Gruß
mrdjoker

16.04.2009 - 09:45 Uhr

Deine Aufgabe schreit gerade zu nach einer Datenbank!
Da du wahrscheinlich wenig Daten (<10000) abspeichern wirst
und dazu nicht viel Ahnung von Datenbanken hast, würde ich dir zu Access raten.

Access hat vor allem den Vorteil, dass man auch als Leihe schnell eine Abfrage schreiben kann.

Hier ein wenig exemplarischer Quellcode:



 public class DB
{     
        string MyConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\\patienten.mdb";
        static DB dbconnection;
        public static DB GetInstance()
        {
            if (dbconnection == null)
                dbconnection = new DB();
            return dbconnection;
        }


        private DB()
        { }

        public int GetIndex(string queryString)
        {
            int index = 0;
            using (OleDbConnection sqlConn = new OleDbConnection(MyConString))
            {
                OleDbCommand sqlCmd = new OleDbCommand(queryString, sqlConn);
                sqlConn.Open();
                OleDbDataReader sqlReader = sqlCmd.ExecuteReader();
                while (sqlReader.Read())
                {
                    index = (int)(sqlReader["id"]);
                    break;
                }
                sqlReader.Close();
                sqlConn.Close();
            }
            return index;
        }

        public void ManipulateDB(string queryString)
        {
            using (OleDbConnection sqlConn = new OleDbConnection(MyConString))
            {
                OleDbCommand sqlCmd = new OleDbCommand(queryString, sqlConn);
                sqlConn.Open();
                sqlCmd.ExecuteNonQuery();
                sqlConn.Close();
            }
        }
}

Zugriff bekommt man mit Hilfe des Singelton Patterns wie folgt:

  int index = DB.GetInstance().GetIndex("select id from Patienten where Name = 'Müller'");

Gruß
mrdjoker

15.04.2009 - 10:19 Uhr

Hallo rber,

hast du schon mal die Suche benutzt?
Ich bin mir 100%ig sicher, dass genau die selbe Frage vor ein paar Wochen schon einmal gestellt wurde.

P.S. wenn du den Thread gefunden hast, dann poste ihn hier bitte. Danke

14.04.2009 - 22:40 Uhr

Ich wusste doch, dass das so leicht geht.
Danke Juy Juka

14.04.2009 - 21:52 Uhr

Hallo zusammen,

gibt es eine Möglichkeit zu registrieren, dass das Betriebssystem mein Programm killen möchte?

Hintergrund
Mein Programm fragt beim Form Closing Event nach, ob das Programm wirklich beendet werden soll.
Fährt der Benutzer den Rechner herunter und beantwortet die Abfrage nicht schnell genug, so schickt anscheinend das Betriebssystem ein Process.kill.
Dadurch können die Abläufe nach der Abfrage nicht mehr bearbeitet werden.

Besten Dank
mrdjoker

10.04.2009 - 01:48 Uhr

Danke, genau danach habe ich gesucht.

Hier der überarbeitete Quelltext:


            WebRequest request = WebRequest.Create("http://www.microsoft.com/mspress/images/banner.gif");
            WebResponse response = request.GetResponse();
            Console.WriteLine            (response.ContentLength.ToString());
10.04.2009 - 00:58 Uhr

Wird die Datei dabei gedownloadet?

Momentan kopiere ich die Datei lokal und lese dann mittels FileInfo die Größe aus.


        string remoteUri = "http://www.microsoft.com/mspress/images/banner.gif";
        string localFileName = "banner.gif";        
        WebClient client = new WebClient();
        Console.WriteLine("Download der Datei " + 
            remoteUri + " nach " + Path.GetFullPath(localFileName));
        // Download durchführen.
        client.DownloadFile(remoteUri, localFileName);       
        FileInfo fi = new FileInfo(localFileName)
        Console.WriteLine("Dateigröße: " + fi.Lenth);
     

10.04.2009 - 00:14 Uhr

Hallo zusammen,

ich möchte die Größe einer Webdatei ermitteln.

Beispiel:
http://www.smilies.4-user.de/include/Grosse/smilie_gr_160.gif
20.678 Bytes

Ich hatte es schon mit FileInfo probiert, nur leider werden URL Adressen nicht unterstützt.

Besten Dank!

31.03.2009 - 07:11 Uhr

Stichwort Observer Pattern

30.03.2009 - 22:15 Uhr

OK ich verstehe, was du meinst.

Anderer Vorschlag:
du könntest deine Instanzen auch in einer Liste speichern..

30.03.2009 - 21:41 Uhr

Du brauchst doch nur die Klasse außerhalb der ButtonClick-Methode deklarieren und schon kannst du ständig drauf zu greifen.

// Edit
Oder du benutzt das Singelton Pattern, damit kannst du IMMER drauf zugreifen!