PathTooLongException – max 260 Zeichen Workarround

Nächste Nacht und schon kommen die nächsten Probleme. Zur Übergabe von Dateiinfos nutze ich gern die FileInfo-Klasse vom .NET. Und bei dem heutigen Projekt geht es darum durch Verzeichnisse der Festplatte zu stöbern und dort verschiedene Sachen zu indexieren. Hat man nun einen Pfad + Dateiname der über 260 Zeichen lang ist, kann man FileInfo nicht mehr instanzieren und bekomme eine PathTooLongException geworfen.

If your code does not have PathDiscovery permission, the error message for this exception may contain only file or directory names instead of full paths.
Full paths must not exceed 260 characters to maintain compatibility with Windows operating systems. For more information about this restriction, see the entry Long Paths in .NET in the BCL Team blog.

Diesem Problem hat sich auch das BCL Team schon gewidmet. Biete aber nur ein Workarround über die Win32-API an. 🙁

Weiterlesen

Veröffentlicht unter C# | Verschlagwortet mit , , , , | Schreibe einen Kommentar

Fehler in C#-Webrequest

Um aus C# herraus HTTP Anfragen zu senden verwendet man im Allgemeinen die HttpWebRequest (geerbt von WebRequest) Klasse.

Bei einem jetzigen Projekt wo es um eine REST-Schnittstelle geht wird HTTP-Basic Auth zur Authentifizierung genutzt. Und da zeigt sich eine Schwäche bei der der Klasse die Mark von IntelliTechtur beschreibt.
Dabei geht es darum das 2 Requests gesendet werden. Beim 1. Request wird eiskalt die Basic-Auth weg gelassen.. wenn der Webservice nun keinen 4xx (nicht 2xx) sendet würde die Klasse es womöglich nicht nochmal probieren. Aber da der Code kommt gibt es wenige milisekunden später einen 2. mit Basic Auth.

Um dieses Problem zu umgehen empfielt mark den Basic-Auth-Token selbst zu berechnen und als Header mit zu senden:

/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */
byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password);
req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);

und siehe da.. nur noch ein Request..

Echt sinnlos seine Zeit damit zu verschwenden… 🙁

 

Links:

Veröffentlicht unter C# | Verschlagwortet mit , , , , , | Schreibe einen Kommentar

Strings formatieren mit C#

Hier mal eine schöne Übersicht gebräuchlicher String.Format Anweisungen in C#

gerade string.Format(“{0:c}”,Wert) für Währungsformatierungen brauch man öfters mal.

In der MSDN im Beispielbereich findet man auch einige Hinweise

 

via Strings formatieren mit C#.

Veröffentlicht unter C#, Programmierung | Verschlagwortet mit , , | Schreibe einen Kommentar

DLLExport .NET ohne C++/CLI

Möchte man Bibliotheken in .NET nutzen, ist das relative simple.. man Importiert diese anhand ihrer Signatur und kann sie benutzen.

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

Möchte man nun aber in C/C++ eine Bibliothek aus .NET nutzen, die man in VB oder C# geschrieben hat, ist das nicht möglich. Es gibt schlichtweg keine Möglichkeit mit dem Visual Studio Methoden zu exportieren. Es müßte ein Attribute  [DLLExport] her der die Methoden mit __stdclass exportiert.

Und auf die Lösung zu dem Problem bin ich heute gestoßen. Und die Lösung ist so “simple” und einfach wie man es bei weitem nicht erwartet hätte. Die Lösung steht unter der CPOL auf codeprojekt.de und wurde von Dark Daskin veröffentlicht.

Weiterlesen

Veröffentlicht unter C#, Programmierung | Verschlagwortet mit , , , , , , , , , , | Schreibe einen Kommentar

Mailserver ohne Authentifizierung – ja das gibt es noch.

Also manchmal frage ich mich echt wo ich hier gelandet bin..

Ich muss diese Woche noch ein Programm welches auch E-Mails versendet.. und was bietet sich da besser an als den mail.hs-mittweida.de der Hochschule zu nutzen, da Port 25 für alle nach Außen gesperrt ist – um Spam zu verhindern.
Nur musste ich dabei erstmal feststellen dass der Mailserver GAR KEINE AUTHENTIFIZIERUNG erfordert!!! Was sprich bitteschön dagegen dass der Benutzer sich authentifiziert – auch intern? Für einige Dienste ist das sicher von Vorteil.. aber dafür könnte man ja einen extra Mailserver stellen der nur für die IPs zur Verfügung steht wo auch die Dienste laufen.

Jeder Kann Mails versenden von wem er will an wen er will.. da wunderts mich auch nicht wieso Notenmeldungen etc. alles noch auf dem guten altem Postweg erledigt werden muss 🙂

Weiterlesen

Veröffentlicht unter C#, Studium | Verschlagwortet mit , , | Schreibe einen Kommentar