Laden...
S
Siedlerchr myCSharp.de - Member
Fachinformatiker Anwendungsentwicklung NRW Dabei seit 07.11.2009 178 Beiträge
Benutzerbeschreibung

Forenbeiträge von Siedlerchr Ingesamt 178 Beiträge

29.03.2011 - 07:32 Uhr

Danke für die Tipps, die Shortcuts kannte ich noch nicht. Werd ich mich wohl oder übel umgewöhnen müssen

28.03.2011 - 11:29 Uhr

Also ich finde den Firefox 4 eigentlich ganz gut, das einzige was mich nervt ist, dass im Kontextemenü, wenn man auf einen Link klickt "In neuem Fenster öffnen" und "In neuem Tab öffnen" vertauscht sind!

Jetzt komm ich ständig auf Neues Fenster öffnen statt auf neuen Tab.

Weiß jemand, ob man das umstellen kann?

24.03.2011 - 08:29 Uhr

Danke für die zahlreichen Antworten, also momentan sehe ich keine Gefahr ein Problem zu bekommen mit der Einstellung AnyCPU

23.03.2011 - 20:26 Uhr

Hallo,
ich habe da mal ne Frage bezüglich der Konfiguration x86 und AnyCPU.

Bei AnyCPU würde das ganze doch im 64Bit Modus laufen, wenn ich auf einem 64 Bit OS wie Win 7 x64 bin und bei x86 im 32Bit Modus?

Meine Frage ist jetzt, gibt es irgendwelche Sachen die unbedingt 32 Bit erfordern und somit nicht auf Any CPU laufen würden?
Also spontan fallen mir nur Sachen ein die COM benutzen die zwingend x86 erfordern und wenn ich ne externe DLL nur als 32 Bit habe.

Gibt es noch mehr Dinge die unbedingt x86 erfordern, oder kann ich ansonsten gefahrlos auf Any Cpu kompilieren?

21.03.2011 - 12:34 Uhr

Also bei uns gibt es Getränke und Kaffe, die Getränke kosten unterschiedlich, so um den 1€ rum, Kaffe kostet pro Becher 20cent, da hängt an der Kafeemaschine ne Strichliste.

Von dem Geld aus den Getränken werden wieder neue bestellt und wir finanzieren damit z.B Feiern oder andere Sachen.

Ich trinke zuhause immer Tee und in der Firma dann nen Becher Kaffee.

21.03.2011 - 12:29 Uhr

Hallo,

ich kenne noch OSS Discovery, das ist ein OpenSource Tool um zu scannen, ob du unrechtmäßigerweise OpenSource Code verwendest:

http://www.openlogic.com/products/scanners.php

Mehr kann ich dir aber auch nicht dazu sagen.

21.03.2011 - 12:24 Uhr

Hallo,

erstmal gefällt mir das Tool schon ganz gut, aber ich fände es gut,wenn man auch andere Extensions angeben könnte als z.B. dbf bei DBASE Dateien, da es ja durchaus vorkommt, dass die Dateinamenserweiterung anders ist.

Wäre toll, wenn du das noch einbauen könntest.

21.03.2011 - 12:18 Uhr

Also du könntest mal einen Blick auf www.codeproject.com werfen, da gibt es auch verschiedene Blogs von Leuten sie sich mit verschiedenen Themen beschäftigen.

Meistens findet man über querlinks dann auch weitere Blogs.

21.03.2011 - 12:09 Uhr

Fiddler/Wireshark für Netzwerkverkehr

Zusätzlich noch für Firefox die WebDeveloper Toolbar, damit kann man wunderbar HTML Forms mit ihren Eigenschaften darstellen.

Für Sorucecodeverwaltung nutze ich git, dazu das Programm gitExtensions als GUI für git, hat auch ne Integration in VS.

Als Alternative zum kostenpflichitgen Reflector: ILSpy

16.03.2011 - 19:07 Uhr

Hi ich habe mal ne Frage,

ich möchte gerne in einem DGV eine Row hoch oder runterschieben können.
Also wenn ich row 2 hoch verschiebe, dann wird sie an die Position von

Also ich hab schon rumprobiert, aber ich finde keine vernünftige Lösung,
ich bin schon auf die Idee gekommen das ganze löschen/neu hinzufügen an der neuen Position, aber das scheint mir nicht das richtige zu sein.

Hat da jemand ne Idee wie man das machen könnte?

15.03.2011 - 12:20 Uhr

Also, wenn du ein Framework für das automatische Testen suchst, da gibt es z.Bmit Nunit eine Open Source lösung:

http://www.nunit.org/

10.03.2011 - 15:23 Uhr

Auch wenn das Thema schon ein wenig älter ist, ich habe hier noch ein interessantes Blog gefunden, bei dem auch um Tipps und Tricks auf der Kommandozeile geht, meistens Batch und Power Shell.

http://blog.commandlinekungfu.com/

01.03.2011 - 18:38 Uhr

Danke erstmal für die Antworten, ich hatte gestern mit einem C++ Programmierer über das Thema gesprochen und der war der Ansicht, dass es möglich ist den Wert im Speicher zu verändern, solange man die Adresse kennt.

Würde das in C# auch über unmanaged Code gehen? Da kann ich ja auch Pointer etc verwenden.

28.02.2011 - 22:57 Uhr

Es kostet $49,99 USD

Hat denn schon jemand Erfahrungen mit den Vorversionen gemacht bzw kann da was zu sagen?

Ist das wirklich so toll wie der Hersteller sagt?

28.02.2011 - 22:41 Uhr

Hi,

mir ist heute die Frage gekommen, ob es möglich ist per Reflection den Wert einer Konstanten zu ändern. Geht das?

Ich habe darüber nichts gefunden, nur, dass es möglich ist private variablen zu ändern.

Nicht das ich sowas vorhabe, mir geht es nur um die theoretische Möglichkeit.

Weiß da jemand genaueres ?

18.02.2011 - 15:18 Uhr

Ich habe mir vor einiger Zeit das Buch C# 4.0 in a Nutshell zugelegt und kann es auch nur wärmstens weiterempfehlen.
Das Buch ist gut aufgebaut und zu jedem Kapitel/Thema gibt es auch gleich Beispiele mit dazu.

Zusätzlich wird auch auf spezielle "Fallen" hingewiesen, in die man tappen kann.

18.02.2011 - 14:59 Uhr

Es gibt eine gute Nachricht, das Team von SharpDevelop entwickelt ein OpenSource Tool, was das gleich kann wie der Reflector.

Weitere Infos:
http://wiki.sharpdevelop.net/ilspy.ashx

21.01.2011 - 17:18 Uhr

Also das ganze klingt sehr interessant, du könntest als Alternative dein Projekt auf z.B. github stellen einstellen und später vielleicht bei NuGet als Paket : http://nuget.org/

21.01.2011 - 13:50 Uhr

Beschreibung:

Dieses Snippet liest eine XML Datei aus und fügt sie einer TV hinzu.
Das eigentliche Snippet hab ich gefunden und angepasst.

Edit// Snipper neu formatiert, ist beim Copy/Paste passiert..
Kommentare sind hierbei unnötig, da der Code soweit selbst erklärend ist.


  /// <summary>
        /// Diese Methode lädt ein XML-Dokument, geht es hierarchisch durch und fügt jeweils die Value Eigenschaft 
        /// eines XML-Nodes in eine TreeView als Node ein
        /// </summary>
        /// <param name="treeView"></param>
        public void XmlToTreeView(TreeView treeView)
        {
            myXmlDocument.Load("...");
            treeView.Nodes.Clear();
            XmlRekursivImport(treeView.Nodes, myXmlDocument.DocumentElement.ChildNodes);
            TranslateNodes(treeView.Nodes);
        }
        private void XmlRekursivImport(TreeNodeCollection elem, XmlNodeList xmlNodeList)
        {
            TreeNode treeNode = new TreeNode(); ;
            foreach (XmlNode myXmlNode in xmlNodeList)
            {
                if (myXmlNode.Value == null)
                {
                    treeNode = new TreeNode(myXmlNode.Name);
                }

                if (myXmlNode.ChildNodes.Count > 0)
                {
                    XmlRekursivImport(treeNode.Nodes, myXmlNode.ChildNodes);
                }
                elem.Add(treeNode);
            }
        }

Schlagwörter: XML, TreeView, Rekursiv

14.01.2011 - 13:25 Uhr

Danke für die Antwort,jetzt ist mir das klar.. Nach dem Seichern auf dem Stream steht der ja am Ende, daran hab ich nicht gedacht.

14.01.2011 - 12:51 Uhr

Hallo,

ich würde ein XMl Document aus dem Speicher in einen String lesen.
Das Problem an der Sache, ich krieg immer ein leerString zurück:

 MemoryStream m = new MemoryStream();
            xmlExceptionDocument.Save(m); //Der Stream wird auch gefüllt

            StreamReader x = new StreamReader(m);
            string data = x.ReadToEnd(); 
            x.Close();
            m.Close();

//Wenn ich alternativ xmlExceptionDocument.Save(Console.Out)) mache, dann landet der Text auch auf der Console.

Ich versteh nur nicht warum der den Stream nicht komplett liest. Gefüllt ist er ja.
Kann mir da jemand weiterhelfen?

14.01.2011 - 11:01 Uhr

Besten dank, ich wusste doch das es dafür ne einfaceh Lösung gibt, bin da aber nicht drauf gekommen...

Ein Hinweis noch:;
du musst noch eine Prüfung auf null durchführen, sonst kriegst du eine Exception (Objekt nicht auf Objektinstanz festgelegt)

   if(ex != null)
            {
            exStore.ExceptionMessage = ex.Message;
            exStore.ExceptionType = ex.GetType().ToString();
            exStore.StackTrace = ex.StackTrace;

            exStore.InnerException = new ExceptionInfos();
         
          FillStore(ex.InnerException, exStore.InnerException);
            }
}
14.01.2011 - 10:22 Uhr

Hallo,

ich hab éin kleines Problem an dem ich grad nicht weiterkomme.
Ich will alle Exceptions + InnereExceptions durchlaufen und jeweils bestimmte Werte davon auslesen und speichern (wird nachher in einer XML-Datei gespeichert)

Die Struktur Ex->InnerEx->InnerEx->.. soll dabei erhalten bleiben.

Ich hab folgende Klasse in der die Daten speichere:

 public class ExceptionInfos
    {
        public ExceptionInfos() { }
        public ExceptionInfos(string exMsg, string exType)
        {
            this.ExceptionType = exType;
            this.ExceptionMessage = exMsg;
        }
        public string ExceptionMessage { get; set; }
        public string ExceptionType { get; set;}
        public string StackTrace { get; set; }
        public string AdditionalInformation { get; set; }
        public ExceptionInfos InnerException;
        public List<ExceptionInfos> exCol;
    }

Mein Versuch das ganze zu füllen sieht so aus:


 public void WriteToXML(Exception ex)
        {

            ExceptionInfos exInfos = new ExceptionInfos();
            exInfos.ExceptionMessage = ex.Message;
            exInfos.ExceptionType = ex.GetType().ToString();
            exInfos.StackTrace = ex.StackTrace;

            ExceptionInfos exInfos2 = new ExceptionInfos();
            Exception ex2 = ex.InnerException;
        
            

            while (ex2 != null)
            {
               
                exInfos2 = new ExceptionInfos();
                exInfos2.ExceptionMessage = ex2.Message;
                exInfos2.ExceptionType = ex2.GetType().ToString();
                exInfos2.StackTrace = ex2.StackTrace;
                Console.WriteLine(exInfos2.ExceptionMessage);
                ex2 = ex2.InnerException;
     
            }

Das Problem ist hierbei das mir die InnereException immer wieder ersetzt wird und ich keine komplette Verschachtelung habe wie ich es gern hätte.

Ich komme im Moment nicht auf die Idee wie ich das lösen könnte, das ich die Verschachtelung behalte. Ich hab schon rumprobiert, aber ich komm nicht auf die Lösung.
Wäre super, wenn mir da jemand auf die Sprünge hilft...

18.12.2010 - 18:53 Uhr

Ich hab mir jetzt letztens das Buch C# 4.0 in a Nutshell (englisch) zugelegt und bin davon gut begeistert und wollte das mal weiterempfehlen:

Autoren: Joseph Albahari, Ben Albahari
http://oreilly.com/catalog/9780596800963/

Beschreibung:

Description

When you have questions about how to use C# 4.0 or the .NET CLR, this highly acclaimed bestseller has precisely the answers you need. Uniquely organized around concepts and use cases, this fourth edition includes in-depth coverage of new C# topics such as parallel programming, code contracts, dynamic programming, security, and COM interoperability. You'll also find updated information on LINQ, including examples that work with both LINQ to SQL and Entity Framework.

Also ich kann das Buch nur wärmstens empfehlen, das behandelt wirklich fast alle Aspekte von .NET und C#.
Jeder Bereich wird gut erklärt und mit verständlichen Beispielen ergänzt.

Also ich würde das Buch den Leuten empfehlen die schon etwas mit C# vertraut sind und die Grundlagen beherrschen.#
Es wird zwar auch kurz Objektorientierung etc. erklärt, aber es ist besser verständlich, wenn man schon Grundlagen in C# hat.

Gruß
Siedlerchr

16.12.2010 - 20:13 Uhr

Ja das war mir klar, habs bei mir auch entfernt gehabt, aber anscheinend hier noch nicht 😃

16.12.2010 - 13:19 Uhr

Habs jetzt hinbekommen dank deinem Tipp:

Ich habe jetzt die Methode Wait entfernt und nurnoch die AddCount und die Signal Methode und im AddCount rufe ich dann einfach meine Finish Methode auf, in der ich dann ein Event feuere...

  public void AddCount(int amount)
        {
            lock (locker)
            {
                value += amount;
                if (value <= 0)
                {
                    Finish();
                    Monitor.PulseAll(locker);
                       
                }
            }
        }

Jetzt ist es so wie ich es haben wollte...

16.12.2010 - 10:15 Uhr

Hallo,

ich habe momentan ein Problem mit dem Threading.
Folgende Situation:

Ich hab die Methode XYZ die wird von 1 oder 2 Threads aufgerufen (kann ich nicht vorhersagen wann welche) mit Hilfe von ThreadPoo.QueueUserWorkItem(...)

Am Ende der Methode XYZ löse ich eine Event aus, was mir einen Eintrag ins Protokoll schreibt

Problem an der Sache: 1 Thread ist eher fertig als der andere -> Das Event wird zweimal ausgelöst.
Also hab ich nach einer Möglichkeit gesucht zu warten bis alle Threads fertig sind und auch folgende Lösung gefunden (da kein .NET 4)

http://www.albahari.com/threading/part4.aspx#_Writing_a_CountdownEvent

Das klappt soweit auch wunderbar, nur sind nach dem Warten halt beide Threas aktiv.
Ich will dann aber am Ende nurnoch einen Thread behalten.

Die Krux an der Geschichte ist halt, das ich nicht weiß ob ich einen oder 2 Thread am laufen habe.

Gibt es eine Möglichkeit die laufenden Threads (wenn Sie den Fertig sind) und einen davon zu behalten?

14.12.2010 - 09:09 Uhr

Wenn es eine .NET Com dll ist, dann kannst du mal regasm probieren um die DLL zu reggen. (im Ordner Net Framework\bin)

Ansonsten such mal in der Registry nach dem Namen der Dll oder Hersteller im Bereich:

[HKEY_CLASSES_ROOT\CLSID

Dort sollte normalerweise ein Eintrag vorhanden sein der die Com Funktionalität darstellt

13.12.2010 - 12:49 Uhr

Hi,

du musst die Com DLL neu registrieren in der VM:

Unter Windows XP gibtst du bei Start->Ausführen ein:
regsvr32 C:\Name.dll

ALso den Pfad zur dll, wenn allerdings leerzeichen im Pfad sind musst du diesen in doppelte Anführungszeichen setzen.

Gruß
Siedlerchr

08.12.2010 - 08:36 Uhr

Danke für die schnellen Antworten

Also ich glaube ich werde das mit dieser Abbruchvariable umsetzen, das scheint mir die richtige Vorgehensweise zu sein.

So ähnlich wird das hier auch gemacht, das hab ich grade noch gefunden:
Threading:SafeCancellation

Exit usw ist nicht das was ich suche..., ich wollte nur beim Klick auf den Button "Abbrechen" die laufenden Threads unterbrechen ohne gleich das ganze Programm zu killen.

07.12.2010 - 15:48 Uhr

Ich suche eine einfache Möglichkeit alle laufenden Threads zu unterbrechen, wenn ich auf Abbrechen drücke oder die Gui beende.

Ich hab schon rumgesucht, aber keine Möglichkeit gefunden wie ich das lösen könnte.
Ich verwende den ThreadPool mit

ThreadPool.QueueUserWorkItem(_ => GetEventData());

und starte da meine Abarbeitung, zwischendurch in anderen Klassen starte ich weitere Threads, die dann alle laufen und zum Teil auch meine GUI über nen Invoke aktualisieren (Progressbar)

Wie kriege ich es jetzt hin, dass ich allen Threads signalisieren kann, dass sie abgebrochen werden sollen? Ich hab mich schon durch diverse Dokumentation und Aritkel zum Thema Threading gewühlt, hab da aber nocht nichts gefunden was mir weiterhilft.

Wäre super, wenn mir da jemand weiterhelfen könnte.

Gruß
Siedlerchr

02.12.2010 - 09:34 Uhr

Vielen dank für die schnellen Antworten, da hab ich mal wieder zu kompliziert gedacht, auf jedenfall funktioniert es jetzt.

Da ich ja nicht die Anzahl der Elemente der Liste verändere brauch ich sie ja nicht immer wieder zuweisen! 🤔
Der Hinweis mit Referenz und Wertetypen hat mich auf den richtigen Gedanken gebracht, da hab ich nicht dran gedacht.

01.12.2010 - 16:11 Uhr

Hallo,

ich hab folgende Situation, ich hab ein Objekt in einer Liste:

List<MyObject> 

Das Objekt MyObject hat bestimmte Properties
Ich habe 2 Methoden in denen jeweils unterschiedliche Properties gesetzt werden.
Also ich stelle mir sowas in der Art vor: Ich rufe beide Methoden gleichzeitig in einem eigenen Thread auf und will im Prinzip eine gemeinsame Liste haben mit meinen Objekten in denen beide Eigenschaften (Name, ID) gefüllt sind.
Gibt es eine Art/Möglichkeit sowas hinzubekommen?
Oder vielleicht gibt es einen anderen Ansatz?

Also Beispiel:


        //Methode1 hier wird der Name gesetzt
    List<MyObject> SetName(List<MyObject> myobjects)
    {
        foreach (MyObject myobjdata in myobjects)
        {
           myobjdata.Name ="xyz";
        }
        return myobjects;
    }

    //Methode 2: Hier wird die ID gesetzt
    List<MyObject> SetID(List<MyObject> myobjects)
    {
        foreach (MyObject myobjdata in myobjects)
        {
           myobjdata.ID="1212";
        }
         return myobjects;
    }

       
    }

    class MyObject
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }


Bis jetzt führe ich die Methoden nacheinander aus und übergebe der 2. Methode das Ergebnis der 1:


List<MyObject> myObjList = new List<MyObject>();
myObjList = SetName(myObjList);
myObjList = SetID(myObjList);

Das Beispiel ist jetzt nur vereinfacht, die jeweiligen Eigenschaften werden aus einer DB ermittelt und es sind vom Sinn unterschiedliche Eigenschaften die nichts miteinander zu tun haben.

17.09.2010 - 07:52 Uhr

Danke erstmal für die schnelle Antwort, ich glaub ich werde das mal mit der Liste probieren....

Gibt es sonst noch Alternativen?

16.09.2010 - 20:15 Uhr

Hallo,

ich stehe derzeit vor einem Problem, wo ich nicht weiß wie ich es am Besten lösen kann:

Also ich hab eine Klasse in der ich mir je nach Auswahl ein Interface zurückgebe.
Das Problem dabei ist, dass ein Benutzer die Möglichkeit hat beide Optionen auszuwählen, was bedeutet, dass ich 2 Implementationen des Interfaces zurückbekommen kann.
Ich hab mal Beispielcode:

Ich hab dort ein Interface IEvent und die Klassen CaseEvent und ContactEvent die jeweils das Interface implementieren.


IEvent myEvent;

       private void SetEventType()
       {

           if (selection == Global.EventSelection.CaseEvent)
               this.myEvent = new CaseEvent(this.sqldb);
           if (selection == Global.EventSelection.ContactEvent)
               this.myEvent = new ContactEvent(this.sqldb);
          //Fall beides ausgewählt 
          // if ( selection == Global.EventSelection.Both)
         // jetzt ist myEvent ja eigentlich sowahl CaseEvent als auch ContactEvent

       }

Ich hab zurzeit einen Workaround gebastelt:


public int GetEventCount()
       {   int count = 0;

           if (myEvent != null)
           {

              count = myEvent.getEventCount();
           }
           else
           {
               myEvent = new CaseEvent(this.sqldb);
               count = myEvent.getEventCount();
               myEvent = new ContactEvent(this.sqldb);
               count += myEvent.getEventCount();
           }

           return count;
       }

Das hat allerdings den unschönen Nachteil das ich in jeder Methode die ich von den Event KLassen aufrufe das ganze Prozedere wiederholen muss.
Das Problem das ich habe, das ich nicht weiß wie ich damit umgehen soll wenn beides ausgewählt worden ist.

Ich hab schon überlegt, nur mir fällt keine Möglichkeit ein wie ich das umgehen kann bzw. das Problem lösen kann.
Hat da jemand eine Idee wie man das ganze lösen kann?

09.09.2010 - 07:49 Uhr

Oh, danke für den Hinweis!! 🤔

Das ist mir nicht aufgefallnn... oops... 8o

08.09.2010 - 22:44 Uhr

Hallo,

ich habe das Problem, dass mir ein RegEx.IsMatch ein false zurück liefert, obwohl die Zeichenfolge existiert und ich sogar über

GroupCollection grpcoll = myRegex.Match(result).Groups;
             string resultMd5Hash = grpcoll[1].Value

drauf zugreifen kann und ein korrektes Ergebnis erhalte.
Also ich habs auch mit dem RegEx-Lab Tool überprüft.

Kann mir jemand sagen warum das false zurück liefert, obwohl es ja existiert?

Hier mein Code:



// in string result steht folgendes:
File1.1=http://rapidshare.com/files/12345678/test2.txt
File1.2=http://rapidshare.com/files/12345678/test2.txt?killcode=2976754592603718317
File1.3=44
File1.4=D115FE119363250D8B04C922C4E76E50
File1.5=Completed


string pattern_Md5 = @"File1\.4=(\w+)";
Regex myRegex = new Regex(pattern_Md5);
 bool md5Exists = myRegex.IsMatch(pattern_Md5);

//Über den Zugriff über eine GroupCollection bekomme ich das richtige Ergebnis:
GroupCollection grpcoll = myRegex.Match(result).Groups;
string resultMd5Hash = grpcoll[1].Value

Also bei meinen anderen Pattern/Regex Sachen bekomm funktionierts.
Woran liegts`?

07.09.2010 - 21:25 Uhr

Danke für den Link, das macht einen guten Eindruck auf den ersten Blick.

26.08.2010 - 22:22 Uhr

Hallo,

ich hab einen kleinen "Bug" entdeckt:

Wenn man in C# Code z.B. eine URL als string hat, dann zeigt der die hier im C#-Code-Block im Forum so an:

string url = "http://example.com"

Naja, er interpretiert alle // automatisch als Kommentar.
Kann man das nicht ergänzen und sagen wenn ein ":" davor ist, dann ignoriert er es?
Gleiches gilt ja auch für andere Protokolle die mit "://" anfangen....

Also micht hat es ein wenig verwirrt, dass das plötzlich mitten im Code Kommentargrün war... 😉

Wäre super, wenn ihr das mal erweitern könntet 8)

Gruß
Siedlerchr

26.08.2010 - 22:17 Uhr

Danke erstmal für die Antwort, aber ich konnte mein Problem teilweise lösen:

Ich hab nochmal geschaut, also C# hat irgendein Problem mit der URL die ich da builde.

Ich hab jetzt einfach mal statt dem Uploadserver (rs123uploadserver.rapidshare.com:80)

folgendes gemacht:

"http://rapidshare.com/cgi-bin/upload.cgi"

Interessanterweise krieg ich da schonmal als Response das richtige Ergebnis, also das was Perl Skript auch zurück gibt:

savedfiles=0 forbiddenfiles=0 premiumaccount=123456

Was mich jetzt alleredings stutizg macht, warum es in PERL funktioniert aber in C# nicht... hm... 🤔 ?(

So jetztmuss ich erstmal weiterschauen warum der jetzt nix hochlädt.

26.08.2010 - 20:00 Uhr

Hat da keiner ne Idee dazu, ich hab auch schon recherchiert, hab aber nix gefunden was mich weiterbringt?
Wie gesagt, das PERL-Skript funktioniert ja so. Nur ich weiß halt nicht ob ich da noch was spezielles in C# machen muss damit es funktioniert

25.08.2010 - 11:02 Uhr

Also es gibt ein gutes Tool mit dem man HttpRequests gut mitprotokollieren kann, das ist Fiddler.

Das ist kostenlos und man es mit C# erweitern, ist auch in C# geschrieben.

Edit// Du kannst sogar Fiddler Core in dein C# Programm einbauen:

FiddlerCore allows you to integrate HTTP/HTTPS traffic viewing and modification capabilities into your .NET application, without any of the Fiddler UI.

Hier findest du Infos.

http://www.fiddler2.com/Fiddler/dev/

Das sollte dich weiterbringen 😃

24.08.2010 - 22:46 Uhr

Hallo zussammen, ich bin derzeit dabei das Upload Skript für Rapidshare.com in C# umzusetzen. Perl-Skript

Das Problem das ich jetzt habe, ist dass das perl Skript bei mir funktioniert ( hab es mit Active Perl unter Win getestet) aber mein C#-Upload nicht.
Ich kriege beim Versuch den ResponseStream zu holen eine WebException.

The Remote Server returned an error. (404) not found.

Wenn ich dann das Request ausführe und mit Fiddler lausche, dann krieg ich in Fiddler folgende Meldung ( siehe Anhang)

Hier mal meine Request Header:



  FileInfo fi = new FileInfo(file);
 

            string filename = fi.Name;
            string realfolder = "0";
            string replacefileid = "0";
            string replacekillcode = "0";
            string bodtype = "0";

               

            string boundary = "---------------------632865735RS4EVER5675865";
            string contentheader = boundary+"\r\nContent-Disposition: form-data; name=\"rsapi_v1\"\r\n\r\n1\r\n;";
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"login\"\r\n\r\n"+login+"\r\n";
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\n"+password+"\r\n";
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"realfolder\"\r\n\r\n"+realfolder+"\r\n";
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"replacefileid\"\r\n\r\n"+replacefileid+"\r\n";
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"replacekillcode\"\r\n\r\n"+replacekillcode+"\r\n";
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"bodtype\"\r\n\r\n"+bodtype+"\r\n";
         
            contentheader += boundary+"\r\nContent-Disposition: form-data; name=\"filecontent\"; filename=\""+filename+"\r\n\r\n";
            string contenttail = "\r\n"+boundary+"--\r\n";
            long contentlength = contentheader.Length + size + contenttail.Length;

            byte[] headerbytes = Encoding.ASCII.GetBytes(contentheader);
            byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

            string url = "http://" + uploadserver + "/cgi-bin/upload.cgi";
            HttpWebRequest request  = (HttpWebRequest) WebRequest.Create(url);
            request.Method = "POST";
            request.ContentLength = contentlength;
            request.KeepAlive = true;
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Referer = "http://rapidshare.com/";
            request.UserAgent = "RapidUploader[v1,2]";
            request.Timeout = -1;
            request.AllowAutoRedirect = true;

Login und Password sin meine Premium Account Zugangsdaten.
Also ich versteh die Meldung von Fiddler nicht so richtig.
Contentlength ist doch angegeben und was soll "No way to tell if the response is complete" bedeuten?
Kann mich da jemand aufklären?

19.08.2010 - 22:09 Uhr

So ich bin schon etwas weitergekommen, die API Spezifikation Apidoc hat mir geholen aber jetzt hab ich eine Verständnisfrage zu dieser Zeile hier:

  $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|;

So also der Variable contenthaeder wird mit einem += was hinzugefügt.
Das ganze ist ein bitweises Oder. ( a | b ergibt den Wert, der entsteht, wenn die korrespondierenden Bits von a und b miteinander ODER-verknüpft werden. )

qq 

steht für Anführungszeichen.

So jetzt frage ich mich, warum wird das mit einen bitweisen Oder verknüpft? Was hab ich davon? Und warum wird da überhaupt ein Oder gemacht?

Also ich weiß wie HTTPRequest funktionieren, also das das ganze Content gedönse ja in Byte umgewandelt wird und dann gesendet wird , nur die Sache mit dem Oder kann ich nicht so nachvollziehen.

Wäre super, wenn mir das jeman erklären kann...

Gruß
Siedlerchr

18.08.2010 - 18:58 Uhr

Bplaced.net kann ich auch nur empfehlen, hab da selber Webspace.

Mehrere Subdomains, wirst du jedoch nur durch mehrfache Anmeldung erhalten.

Ist so nicht korrekt, du kannst beliebig viele Subdomains erstellen.
Ansonste ist der komplett kostenlos und werbefrei.

www.bplaced.net

Es gibt 2 Optionen:
freestyle - Luxus für Deine Webseite
1 Gigabyte Webspace
8 FTP-Accounts
8 MySQL-Datenbanken
8 PostgreSQL-Datenbanken

freestyle plus - darf's etwas mehr sein ?
2 Gigabyte Webspace
2 FTP-Accounts
2 MySQL-Datenbanken
2 PostgreSQL-Datenbanken
Für große Portale und Deine umfangreichen
Projekte mit erhöhten Ansprüchen

Den einzigen Nachteil den ich bisher gefunden habe, war, dass fsockOpen ausphp nicht funktioniert, ist aber wohl geplant das zu aktivieren.

16.08.2010 - 21:31 Uhr

Danke für die Info, das hat mich schon weitergebracht, das mit dem Parameter - d hatte ich nachgeguckt aber das mit dem - s wusste ich nicht.
Was das macht war nicht so das Problem, sondern das wie 😉

Das in Bytes umwandeln hab ich soweit auch schon hinbekommen.

So jetzt habe ich mal das listRealFolders implementiert, aber jetzt blicke ich hier am Ende nicht so ganz durch:

 $result = get("http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=listrealfolders_v1&login=$htmllogin&password=$htmlpassword&type=$type") || "";
  if (not $result or $result =~ /^ERROR: /) { die "API Error occured: $result\n" }

  foreach (split(/\n/, $result)) {
    ($realfolder, $parent, $name) = split(/,/, $_, 3);
    $PARENTANDNAME_REALFOLDER{"$parent,$name"} = $realfolder;
  }

Also ich hab ja jetzt das result, z.B. mehrere Ordnernamen.
So dann split ich das nach jedem Unix-Zeilenende (\n)
realfolder kriegt der aus der

sub uploadfolder { 
  $realfolder = $PARENTANDNAME_REALFOLDER{"$parent,$file"} || 0;
 

Wenn ichs richtig lese dann ist realfolder eine Art Array aus dem $parent ( glaube die ParentDirectory) und in $file ( scheint der Dateiname zu sein oder)

Dann wird das ganze da noch irgendwie gesplittet und dann zugewiesen.
Das versteh ich absolut nicht was da passiert. 8o
Wäre super, wenn mir das einer erklären könnte.

PS: Perl ist aber auch unübersichtlich 🙂

16.08.2010 - 20:34 Uhr

Hallo,

nachdem ich mir grad einen Wolf gesucht habe nach der Assembly System.Web und das einfach nicht finden konnte bin ich durch etwas googlen auf die Tatsache gestoßen, dass die Default .NET Framework Version bei VS 2010 für ein neues Projekt das .Net Framework 4 ClientProfile ist.

Und das Client Profile ist ne abgespeckte Variante vom eigentlichen Framework, deshalb fehlen da einige Assemblies.
Kann man über Project ->Properties wieder umstellen.

Also für alle die mal in die selbe Situation kommen, poste ich das mal hier 😉

Dazu auch dieser Link hier, der das ganze nochmal erklärt:
.NET Framework Client Profile [Justin Van Patten]

16.08.2010 - 19:32 Uhr

Hallo Leute,

ich suche jemanden der mit Helfen kann ein Perl-Skript zu verstehen, und der mir evtl. Tipps geben kann wie man bestimme Sachen in C# löst.

Also konkret hab ich vor das Perl Skript von Rapidshare für einen Uploader in C# umzusetzen, allerdings hab ich noch nie mit Perl zu tun gehabt und es fällt mir etwas schwer da durchzublicken und will es jetzt auch nicht unbeding neu lernen 😃
Es geht konkret hier um das Skript: RS-Upload Perl-Skript

Also im groben ganzen verstehe ich in etwa die Funktionsweise und den Ablauf, aber es gibt da einige Stellen mit denen ich nichts anfangen kann.
Da wäre es gut, wenn mir da jemand weiterhelfen könnte...

Also zum Beispiel verstehe ich nicht, wie das Skript so einfach an die Bytes des Files kommt, das passiert hier, aber ich versteh nicht wie:


sub countfiles {
  my $dir = shift || die;

  my ($filename, $numfiles, $numfolders, $numbytes, $subnumfiles, $subnumfolders, $subnumbytes);

  foreach $filename (glob("$dir/*")) {
    if ($filename =~ /\.uploaddata$/) { next }

    if (-d $filename) {
      ($subnumfiles, $subnumfolders, $subnumbytes) = &countfiles($filename);
      $numfiles += $subnumfiles;
      $numfolders++;
      $numbytes += $subnumbytes;
    } else {
      $numfiles++;
      $numbytes += -s $filename || 0;
    }
  }

  return ($numfiles || 0, $numfolders || 0, $numbytes || 0);
}

09.08.2010 - 18:27 Uhr

Das Buch Pattern von Kopf bis Fuß hab ich auch zu einem großteil durchgelesen, es ist zwar am Anfeang son bisschen komisch, das es so "Kinderbuchmäßig" aufgemacht ist, aber die Patterns bzw ihre vorausgegangenen Probleme werden gut beschrieben und nachvollziehbar die Lösungen erklärt. Das ganze erfolgt zwar an Codebeispielen in Java aber das ist ja übertragbar.

Also ich war auch erst skeptisch, aber dann doch positiv überrascht und es hat vorallem praktische nachvollziehbare Beispiele aus der Realität.

08.08.2010 - 23:19 Uhr

Ah das war der Fehler. Ok danke für die Hilfe, es funktioniert jetzt wunderbar. 🙂

Ich hab das DGV nicht im Designer gestaltet weil wenn ich dann das Dataset auswähle kriege ich auf der Form eine Kopie des Datasets, für jede Form auf der man es verwendet arbeitet man jeweils auf einem eigenen Objekt des Datatsets, anstatt das man ein einziges Objekt im ganzen Projekt gibt.