Wenn man an einem Projekt sitzt, möchte man sich und anderen immer wieder gerne Arbeit ersparen und CodeSnippets für die Nachwelt (sich selbst eingeschlossen) konservieren. So geht es mir auch gerade. Ich arbeite an meinem Projekt “Brotkorb” und integriere gerade einen Upload-Mechanismus. Das geht ziemlich einfach über das UploadFile-Control in ASP.NET bzw Visual Studio 2008, allerdings muss ich noch einige Dinge anpassen und zum Beispiel sicher stellen, dass es jeden Upload nur einmal gibt, den Namen betreffend. Da liegt es also nahe, einen Einzigartigen String für den Dateinamen zu verwenden, allerdings kein Giganto-Konstrukt wie es UUID liefert. Das ist im Web (URLs, String-Längenbegrenzung) einfach oft nicht angebracht, wenn wir es nicht mit Userzahlen jenseits der Millionengrenze zu tun haben. Eine einfache Funktion wie von http://blog.madskristensen.dk/post/Generate-unique-strings-and-numbers-in-C.aspx schafft da Abhilfe.
1: private string GenerateId()
2: {
3: long i = 1;
4: foreach (byte b in Guid.NewGuid().ToByteArray())
5: {
6: i *= ((int)b + 1);
7: }
8: return string.Format("{0:x}", i - DateTime.Now.Ticks);
9: }
Und wo wir gerade dabei sind: Dateinamenerweiterung in UpperCase? Das fühlt sich für mich, kommend aus der Unix/Linux-Welt irgendwie sonderbar und falsch an. Deshalb wird die Extension auch mal kurzerhand in all lowercase umgewandelt.
1: private string ExtractFileExtensionInLower(string filename)
3: string fext;
4: return fext = filename.Substring(filename.LastIndexOf(".")).ToLower();
5: }
Das nur am Rande, ich bin gerade wieder an etwas größerem dran, der nächste Codeclip kommt bestimmt.
Viel Spass beim Coden und lassts euch gut gehen!
jan