Wie könnte man das ändern, falls das der Fehler ist?
ich sitze seit einigen stunden nun an eine uploadfunktion über ftp aber nichts geht...
hab nun aus der hilfe:
http://msdn2.microsoft.com/de-de/library/system.net.ftpwebrequest.getrequeststream(VS.80).aspx
und nutze exakt das beipsiel habe nur die zugangsdaten geändert und den letzten befehl console.write... auskommentiert, da ich eine windows form arbeite
aufrufen tue ich das ganze mit:
AppendFileOnServer(tb_Kurse1Pdf.Text , StringToUri("ftp://domain.de/text.pdf"));
erster paramter könnte das stehen:
C:\Dokumente und Einstellungen\Benutzer\Desktop\text.pdf
Das programm friet immer ein. es erstellt eine datei auf dem FTP und das war es dann, muss über taskmanger beenden...
die datei ist dann auf dem ftp mit 0kb...
weiß jemand vielleicht eine andere Lösung wie ich das ganze einfach realisieren kann?
Danke schon mal
Hier noch der kaum geänderte code aus der hilfe:
public static bool AppendFileOnServer(string fileName, Uri serverUri)
{
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.Method = WebRequestMethods.Ftp.AppendFile;
StreamReader sourceStream = new StreamReader(fileName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential("user", "pw");
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
//Console.WriteLine("Append status: {0}", response.StatusDescription);
response.Close();
return true;
}
Ich versuche schon verzweifel aus einem text einen bestimmten string zu ersetzen z.b:
Text:
Mein text hat viele <rot>zeilen, aber kann auch <br> oder \n enthalten und noch viel mehr
ersetzen:
"<rot>" mit <font color>
<rot> kann mehrmals im text vorkommen!
habs erst mit string.replace versucht aber da kann man ja nur ein zechen ersetzen.
dann mit regex aber will mir einfach nicht gelingen:
text = Regex.Replace(text, @"<rot>", "<font color>", RegexOptions.Singleline | RegexOptions.IgnoreCase);
kann mir jemand vielleicht weiter helfen?
Danke!
hab eine funktion printtext und diese wird aufgerufen wenn eine nachricht ansteht, da durch wird die nachricht dann in eine vorhandene Textbox geschrieben.
hat sich erledigt habs nun anders gelößt aber danke
oky danke, hier ist man einfach gut aufgehoben 😁
einfach per XMLSerializer serialisieren
vielen dank für deine aufmerksamkeit. werd mir dann wohl mal den serializer anschauen müssen. gibts da für ein gutes tutorial?
hab halt ganz normal nen projekt gestartet und das form was man auf dem screen sieht gemacht... dann noch deine funktion rein und kann von der aus nicht auf z.b. rtb_protokoll.text zugreifen.
aber kann ja einfach aus void string machen und den dann zurück geben oder? konnte es bisher noch nicht testen.
hab jetzt so weit nachgebaut das was im buton listen nun beim load vom form drin steht dann connect halt bei meinen button connect und dann noch deine funktion private void Listen()
klappt auch alles so weit nur das ich halt den gesendeten text in ne varibale packen muss und dann halt den button check betätigen muss, da mit dieser in der textbox steht.
kann leider nicht aus deiner funktion Listen() auf die in form 1 befindliche textbox zugreifen....
vielleicht eine idee??
das beispiel ist gut, hab es sogar zum testen bekommen. aber leider fehlt mir das wissen um es komplett zu verstehen.
mal zu erklärung was ich vielleicht als beispiel oder tutorial suche:
für mich wäre jetzt interessant wie man die verbindung erstellt (natürlich auch trennt) und wie man nachrichten austauscht
Moin, hab zwar im internet gesucht aber nichts passendes gefunden, alles behandelt das thema dateien auszutauschen, aber suche etwas anderes.
Es sollte nach möglichkeit ohne server gehen. auf zwei pcs soll das programm laufen, beide kennen die ip des anderen. nun soll man den einen über z.b. textbox den anderen eine nachricht senden können und beim anderen soll dann ein fenster aufpoppen mit dem text.
evtl tcp da später vielleicht ein datenaustausch da zu kommt.
gibt es da für nen gutes Tutorial oder Code Beispiele?
danke in voraus schon mal
und da kommen wa an die grenze meines englisch habs mir aber grad mit hilfe übersetzt und sehe da, müsste alles so stimmen.
hab trotzdem mal ne mail mit pic gesendet und werde wohl auch noch nen link auf der homepage einbinden...
man weiß ja nie 👅
oky danke.
und sorry wegen den topic, wusste nicht ganz genau was ich schreiben soll 😁
werd dann mal das pic dort hin schicken
moin, ich habe ein kleines tool geschrieben was ein iconset nutzt und in dem stand in der readme das man einen link bei den credits eintragen soll und fertig.
wäre das so richtig?
danke in voraus
danke, hat weitergeholfen 😉
muss zwar noch ein bissel rumbasteln bis das so geht wie ich das brauch aber ist genau das richtige gewesen 🙂
moin moin
mein XML dokument sieht folgender maßen aus
<?xml version="1.0" encoding="utf-8"?>
<Adressbuch>
<Kontakt Id="1">
<Name>
<Vorname>a</Vorname>
<Nachname>a</Nachname>
</Name>
<Strasse>a</Strasse>
<Nr>a</Nr>
<PLZ>a</PLZ>
<Ort>a</Ort>
</Kontakt>
<Kontakt Id="2">
<Name>
<Vorname>b</Vorname>
<Nachname>b</Nachname>
</Name>
<Strasse>b</Strasse>
<Nr>b</Nr>
<PLZ>b</PLZ>
<Ort>b</Ort>
</Kontakt>
</Adressbuch>
und meine funktion bisher:
public int editKontaktData(string datei, string id, kontakt kontakt)
{
XmlDocument doc = new XmlDocument();
doc.Load(datei);
XmlNode xnData = doc.SelectSingleNode("/Adressbuch/Kontakt[attribute::Id=\"" + id + "\"]");
if (xnData != null)
MessageBox.Show(xnData.InnerXml, "titel", MessageBoxButtons.OK);
return 1;
}
in der MessageBox sehe ich nun den Kontakt mit all seinen unterangaben von dem ich die ID mit übergebe z.b. 1, dann erhalte ich aus der XML alles zwischen <kontakt id=1> und </kontakt> als xml...
jetzt frage ich mich wie kann ich da einen wert ändern z.b. bei
<name>
<vorname>a</vorname>
</name>
zu
<name>
<vorname>f</vorname>
</name>
danke in voraus
ps:
kenne bisher nur
XmlDocument doc = new XmlDocument();
doc.Load(datei);
XmlNode xnData = doc.SelectSingleNode("/Data/" + node);
if (xnData != null)
{
xnData.Attributes[attributes].InnerText = value;
}
da mit könnte ich aber nur bei kontakt die ID ändern... leider nicht etwas was zwischen <name> und </name>
nice, danke endlich mal verstanden was es mit mit dieser struktur in klassen auf sich hat (get...set)
das hat unser lehrer nicht so ganz rüber gebracht 😁
Mahlzeit,
Ich habe eine klasse mit mehreren Methoden, eine da von ließt eine XML bzw. einen teil ein z.B.
<kontakt id="1">
<name>
<anrede>Herr</anrede>
<vorname>Max</vorname>
<nachname>Mustermann</nachname>
</name>
<str>irgendwo</str>
<nr>87</nr>
</kontakt>
und da von gibt es mehrer Kontakte mit id+1 in der xml...
sollte ich diese alle auf ein mal einlesen und in eine list...array..struktur laden um dann über die Id auf eine ganze zeile immer zu zugreifen?
eigentlich erhält die methode die id und ließt den kontakt mit dieser id ein. jetzte hat der kontakt natürlich name, straße, nur etc.
wie kann ich das am besten zurückgeben?
denn bisher hab ich versucht mit der methode ein array zurück zu geben aber bin dran gescheitert...
was empfielt ihr mir?
Sorry doppelpost 👅
werd es wohl nun so machen,
habe wo anders die anzahl der knoten bzw kontakte die drin stehen und nutze diese als counter... mein code:
public int lastKontaktID(string datei, int counter)
{
string id;
XmlDocument doc = new XmlDocument();
doc.Load(datei);
byte[] bytes = Encoding.UTF8.GetBytes(doc.InnerXml);
MemoryStream memStream = new MemoryStream(bytes);
// Mit MemStream ein XPathDocument instanziieren
XPathDocument xpathDoc = new XPathDocument(memStream);
// XPathNavigator holen
XPathNavigator xpathNav = xpathDoc.CreateNavigator();
xpathNav.MoveToChild("Adressbuch", "");
xpathNav.MoveToChild("Kontakt", "");
for (int i = 1; i < counter; i++)
{
xpathNav.MoveToNext();
}
id = xpathNav.GetAttribute("Id", "");
return Convert.ToInt32(id);
}
ich erstelle ein Xpath Navigator springe zum ersten kontakt und von da aus mit der for schleife bis zum letzten und hole mir von dem die ID
geht bestimmt noch anders und einfacher, ohne die anzahl der knoten zu kennen...
nice wöre so was wie xpathNav.MoveToLastChild();
halt zum letzten node springen statt moveTonext oder MoveTo child, aber so was hab ich leider nicht gefunden
bidde bidde... bastel da mit auch shcon länger rum... bastel phpmyadmin nach als klasse.
mich würde interessieren, wie man von einer funktion zu einer anderen ein array zurückgibt... da ja mansche anfragen ne große tabelle enthalten.
werd ich mal schauen.... hat vielleicht noch jemand creative ideen? denn hat bestimmt schon mal jemand gemacht
Ahoi, ich noch mal mit ne kleinen frage zu XML 👅
ich habe ein xml:
<?xml version="1.0" encoding="utf-8"?>
<Adressbuch>
<Kontakt Id="1">
<Name>Max</Name>
</Kontakt>
<Kontakt Id="2">
<Name>Moritz</Name>
</Kontakt>
<Kontakt Id="3">
<Name>Fritz</Name>
</Kontakt>
</Adressbuch>
und möchte nun vom letzten Kontakt die ID haben, bisher hab ich diese lösung:
byte[] bytes = Encoding.UTF8.GetBytes(doc.InnerXml);
MemoryStream memStream = new MemoryStream(bytes);
// Mit MemStream ein XPathDocument instanziieren
XPathDocument xpathDoc = new XPathDocument(memStream);
// XPathNavigator holen
XPathNavigator xpathNav = xpathDoc.CreateNavigator();
// Abfrage einrichten
string xpathQuery = "/Adressbuch/Kontakt";
XPathExpression xpathExpr = xpathNav.Compile(xpathQuery);
// Knotenmenge abrufen
XPathNodeIterator xpathIter = xpathNav.Select(xpathExpr);
// Ausgeben
xpathIter.CurrentPosition = 2;
while (xpathIter.MoveNext())
{
MessageBox.Show(xpathIter.Current.Value, "text", MessageBoxButtons.OK);
}
ich könnte nun auch xpathIter.Count statt der while nehmen und hätte die anzahl 3, d.h. ich weiß wieviele kontakte drin sind und da bisher ja 1...2...3 die IDs sind stimmt das auch, aber wenn nun die 2 gelöscht wird dann stimmt meine lösung nicht,
also muss das bestimmt auch anders gehen.
🤔
danke schon mal in voraus 😁
...
Ungefähr so. 🙂
Perfekt, nun gehts... genau das was ich brauchte thx 👍 😁
versuch es mal mit dem tut:
http://www.codeplanet.eu/tutorials/csharp/6-csharp/5-verbindung-zum-mysql-server-mit-csharp.html
XmlDocument.InsertAfter
erst mal danke...
Ich hab zwar gegoogelt und rumexperimentiert... das einzige was ich geschaft habe ist unter <Kontakte anzahl="2"> einzufügen: <w>
das mit xnData.AppendChild(xnKontakte);
aber das ist nicht das was ich vor hab...
für XmlDocument.InsertAfter brauch ich ja zwei XmlNodes, da hab ich mir gedacht, erstell ich ein Node (aber wie?) z.B.:
XmlNode xnKontakte = doc.CreateNode(XmlNodeType.Element, "W", "123");
und dann
xnData.AppendChild(xnKontakte);
ergebnis:
<Data>
<Kontakte Anzahl="1">
<W xmlns="123" />
</Kontakte>
</Data>
leider ist er nun in Kontakte statt da drunter und wo kommt xmls her?
hätte es gern so
<Data>
<Kontakte Anzahl="1" />
<W Anzahl="1" />
</Data>
hat vielleicht jemand da für ein Codeschnipsel evtl kommentiert?
EDIT:
mit
XmlNode root = doc.DocumentElement;
XmlElement elem = doc.CreateElement("w");
elem.InnerText = "1";
root.AppendChild(elem);
erhalte ich:
<Data>
<Kontakte Anzahl="1" />
<w>1</w>
</Data>
Das kommt dem ergebnis schon etwas näher... aber brauche leider noch immer hilfe?
Guten Abend,
Ich erstelle mit meinem Programm eine XML über Xmlwriter z.B:
using (XmlWriter writer = XmlWriter.Create(datei, settings))
{
writer.WriteStartElement("Adressbuch");
writer.WriteStartElement("Kontakt");
writer.WriteAttributeString("Id", id.ToString());
writer.WriteStartElement("Vorname");
writer.WriteString(vname);
writer.WriteEndElement();
writer.WriteStartElement("Nachname");
writer.WriteString(nname);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
//writer.Close(); Noch testen!
}
und mit folgendem Code editiere ich einen Wert:
XmlDocument doc = new XmlDocument();
doc.Load(datei);
XmlNode xnData = doc.SelectSingleNode("/Data/Kontakte");
if (xnData != null)
xnData.Attributes[attributes].InnerText = value;
doc.Save(datei);
Jetzt frag ich mich, wie kann ich z.b. einen neuen knoten anfügen?
Als beispiel
<kontaktliste>
<kontakt id ="1">
<name>Max</name>
</kontakt>
<kontaktlist>
nun möchte ich nach kontakt id=1 den nächsten, so das das dokument dann wie folgt aussieht:
<kontaktliste>
<kontakt id ="1">
<name>Max</name>
</kontakt>
<kontakt id ="2">
<name>Moritz</name>
</kontakt>
<kontaktlist>
geht das nur über XmlDocument? Wenn ja, wie? 🙁
Vorteil bei XmlWriter ist ja, das alles schön formatiert bleibt.
Dank schon mal in vor raus!
hier mal der richtige link zum MSDN 2008
klick
Aloa,
Code:
public CookieContainer cookies = new CookieContainer();
public String html = "";
public void Make_sessioncookie(string url)
{
HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create(this.StringToUri(url));
sessionRequest.CookieContainer = new CookieContainer();
this.cookies = sessionRequest.CookieContainer;
HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
sessionResponse.Close();
}
da mit erstelle ich einen Cookie und mit:
webBrowser1.Document.Cookie = plaudern.cookies.GetCookieHeader(plaudern.StringToUri("http://www.codedragon.de"));
weis ich z.b. mein cookie den Webbrowser-Steuerelemnt hinzu aber das klappt nicht. Ich logg mich halt mit WebRequest etc. ein und nutze immer den selben cookie... aber der Webbrowser nutzt einen anderen.
kann man das irgendwie einstellen bzw anders realisieren ?
und der letzte beitrag zu meinem Monolog löl
Die Lösung:
private void button6_Click(object sender, EventArgs e)
{
Uri uri = new Uri("http://www.codedragon.de");
CookieContainer cookieContainer = new CookieContainer();
string html;
string loginData = "ownnickname=****&ownpassword=****&submit=Anmelden";
HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create(uri);
sessionRequest.CookieContainer = new CookieContainer();
cookies = sessionRequest.CookieContainer;
HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
sessionResponse.Close(); // sehr wichtig!
richTextBox1.Text += cookies.GetCookieHeader(uri) + "\n";
// Einloggen
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=user_login.php");
req.CookieContainer = cookies;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] loginDataBytes = encoding.GetBytes(loginData);
req.ContentLength = loginDataBytes.Length;
Stream stream = req.GetRequestStream();
stream.Write(loginDataBytes, 0, loginDataBytes.Length);
stream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
// Eine Unterseite z.B. Profil
req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=personal/meeting.php&pos=|21");
req.CookieContainer = cookies;
req.Method = "GET";
res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
webBrowser1.Document.Body.InnerHtml = html;
}
man muss den response auch schließen
ich führe mal mein Monolog weiter
private void button4_Click(object sender, EventArgs e)
{
// cookieContainer is used to store the cookies used by the login
CookieContainer cookieContainer = new CookieContainer();
string html;
string loginData = "ownnickname=***&ownpassword=***&submit=Anmelden";
// First hit the login page
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=user_login.php");
req.CookieContainer = cookieContainer;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] loginDataBytes = encoding.GetBytes(loginData);
req.ContentLength = loginDataBytes.Length;
Stream stream = req.GetRequestStream();
stream.Write(loginDataBytes, 0, loginDataBytes.Length);
stream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
// Then grab the content of the desired page
req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=personal/meeting.php&pos=|21");
req.CookieContainer = cookieContainer;
req.Method = "GET";
res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
webBrowser1.Document.Body.InnerHtml = html;
}
Mit dem Code klappt alles so weit nur bei der neuen Abfrage kann ich mein CookieContainer nicht hinzufügen, da hängt sich das programm immer auf, also:
req.CookieContainer = cookieContainer;
Weise ich einem Container anders einen Container hinzu?
Mit diesem Code
private void button2_Click(object sender, EventArgs e)
{
string html;
Uri uri = new Uri("http://www.codedragon.de/index.php");
HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create("http://www.codedragon.de/index.php");
sessionRequest.CookieContainer = new CookieContainer();
HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
richTextBox1.Text += sessionRequest.CookieContainer.GetCookieHeader(uri)+"\n";
HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create("http://www.codedragon.de/index.php?do=user_login.php");
loginRequest.Method = "POST";
loginRequest.CookieContainer = new CookieContainer();
//loginRequest.CookieContainer = sessionRequest.CookieContainer;
string postData = "ownnickname=****&ownpassword=****";
byte[] bytes = Encoding.UTF8.GetBytes(postData);
loginRequest.ContentType = "application/x-www-form-urlencoded";
loginRequest.Method = "POST";
loginRequest.ContentLength = postData.Length;
using (Stream requestStream = loginRequest.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
HttpWebResponse Response = (HttpWebResponse)loginRequest.GetResponse();
richTextBox1.Text += loginRequest.CookieContainer.GetCookieHeader(uri)+"\n";
StreamReader ResponseStream = new StreamReader(Response.GetResponseStream());
html = ResponseStream.ReadToEnd();
webBrowser1.Document.Body.InnerHtml = html;
}
Kann ich mich einloggen und erhalte auch eine PHPSession im code, aber die scheint nicht zu stimmen nach dem login steht in der session immer noch guast drin...?
Hab jetzt schon einiges gelesen und versucht aber bekomme einfach nichts hin...
ich möchte mich bei einer seite einloggen und dann noch mal eine anfrage bzw url aufrufenund mir den code ausgeben um zu sehen ob ich eingeloggt bin
For public Form1:
HttpWebRequest httpRequest;
code für POST (login):
public HttpWebRequest GenerateHttpWebRequest_post(string uriString, string postData, string contentType)
{
// URI-Objekt erzeugen
Uri uri = new Uri(uriString);
// Die ursprüngliche Anfrage erzeugen
httpRequest = (HttpWebRequest)WebRequest.Create(uri);
// Die Bytes für die bereits maskierten Daten holen
byte[] bytes = Encoding.UTF8.GetBytes(postData);
// Den ContentTyp für die zu versendenden einrichten
httpRequest.ContentType = contentType; //"application/x-www-form-urlencoded"; bei Formularen
httpRequest.Method = "POST";
// Die Länge der zu übermittelnden Daten setzen.
httpRequest.ContentLength = postData.Length;
// den Anfrage-Strem holen und ihn in die POST-Daten schreiben.
using (Stream requestStream = httpRequest.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
// Die Anfrage zurückliefern
return httpRequest;
}
Mein Button für abfrage:
string frage = "ownnickname=****&ownpassword=****";
string contenttype = "application/x-www-form-urlencoded";
string html = "";
HttpWebRequest daten;
daten = GenerateHttpWebRequest_post("http://www.codedragon.de/index.php?do=user_login.php", frage, contenttype);
using (HttpWebResponse response = (HttpWebResponse)daten.GetResponse())
{
// Antwort-Stream anfordern
Stream responseStream = response.GetResponseStream();
// Einen Stream-Reader verwenden, der UTF8 versteht.
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
html = reader.ReadToEnd();
}
}
richTextBox1.Text = html;
//webBrowser1.Navigate("http://www.codedragon.de", false);
Wie man sieht logge ich mich ein und gebe dann den quellcode in eine RTB wieder, da sehe ich dann auch " erfolgreich eingeloggt werden in 5 sek weitergeleitet"
nun würde ich gern noch mal codedragon.de/index.php abrufen und den code in eine RTB2 einfügen, dann würde ich ja sehen, ob noch das loginform da ist oder das usermenü
die seite nutzt cookies und (glaub) sessions, wie kann ich da mit arbeiten bzw da für sorgen das ich bei der nächsten abfrage eingeloggt bin?
wie könnte der code für ein zweiter aufruf sein?
könnte ich das loogin dann auch so nutzen, das ich bei derwebbrowser-komponente eingeloggt bin?
Sorry diese 3 fragen aber was c#, .net und web angeht ist mir alles neu. komme aus der phpecke
danke in voraus denn bisher wurde hier immer gut geholfen
Das beispiel ist genial, hab da mit nun ein bisschen gespielt und klappte auf Anhieb...
Bin Beuling in C#.
Nun wollt ich in einem eigenen neuen Projekt das versuchen, aber es will einfach nicht klappen. Erstelle eine Windows Anwendung in C# und verweise dann noch auf die AVICapWrapper.dll aber wenn ich dann mit einem panel bzw dem aviCapture1 objekt arbeiten will sol ich immer new benutzen...
ich hoffe, jemand kann mir weiterhelfen,
danke schon mal in voraus!
Edit, hab gerade festgestellt, das beim taskmanager der speicher immer mehr anwächst, kann man das verhindern?