Einfache FTP Klasse für C#

Vor kurzem hab ich einen FTP-Datentransfer innerhalb eines C# Programmes benötigt, nach etwas Gehirnschmalzvernichtung ist dieses nichtssagende, undokumentierte Stück Code rausgekommen. Nichts besonderes, keine ausgefuchste Fehlerbehandlung, keine Spezialfunktionen, keine ausführlichen Tests durchlaufen – wozu auch, es läuft ja. 😉

Zur meiner Entschuldigung muss ich auch vorbringen, dass das ja nur der erste Schuss ist – zumindest bevor es produktiv geht, sollten zumindest noch ein paar Fehlerbehandlungsroutinen da reinwachsen.

using System;
using System.Net;
using System.IO;

class FTP {

    private string ftpServerIP;
    private string ftpUserName;
    private string ftpPassWord;

    public FTP(string serverIP, string userName, string passWord) {
        this.ftpServerIP = serverIP;
        this.ftpUserName = userName;
        this.ftpPassWord = passWord;
    }

    public bool Upload(string fileName) {
        FileInfo fi = new FileInfo(fileName);
        string uri = "ftp://" + ftpServerIP + "/" + fi.Name;

        FtpWebRequest ftpRequest = CreateRequest(uri, WebRequestMethods.Ftp.UploadFile);
        ftpRequest.ContentLength = fi.Length;

        int buffLength = 2048;
        byte[] buff = new byte[buffLength];
        int count;
            
        bool result = false;
            
        using (FileStream fileStream = fi.OpenRead()) {
            Stream ftpStream = ftpRequest.GetRequestStream();

            count = fileStream.Read(buff, 0, buffLength);

            while (count > 0) {
                ftpStream.Write(buff, 0, count);
                count = fileStream.Read(buff, 0, buffLength);
            }

            ftpStream.Close();
            fileStream.Close();

            result = true;
        }

        return result;

    }

    public bool Download(string filePath, string fileName) {

        string uri = "ftp://" + ftpServerIP + "/" + fileName;
        FtpWebRequest ftpRequest = CreateRequest(uri, WebRequestMethods.Ftp.DownloadFile);

        int buffLength = 2048;
        int count;
        byte[] buff = new byte[buffLength];

        bool result = false;

        using (FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create)) {

            FtpWebResponse response = (FtpWebResponse) ftpRequest.GetResponse();
            Stream ftpStream = response.GetResponseStream();

            count = ftpStream.Read(buff, 0, buffLength);
            while (count > 0) {
                outputStream.Write(buff, 0, count);
                count = ftpStream.Read(buff, 0, buffLength);
            }

                
            ftpStream.Close();
            response.Close();
            outputStream.Close();

            result = true;
        }

        return result;
    }

    private FtpWebRequest CreateRequest(string uri, string requestMethod) {
        FtpWebRequest ftpRequest;
        ftpRequest = FtpWebRequest.Create(new Uri(uri)) as FtpWebRequest;
        ftpRequest.Credentials = new NetworkCredential(this.ftpUserName, this.ftpPassWord);
        ftpRequest.KeepAlive = false;
        ftpRequest.Method = requestMethod;
        ftpRequest.UseBinary = true;
        return ftpRequest;
    }
}

 

Video Sessions der MIX10

Vor kurzem war die MIX10 Konferenz in Las Vegas.

Diese Konferenz wird von Mircosoft veranstaltet und behandelt vor allem Themen rund um Web und Design. Das ist ein weitgestreutes Themengebiet und so waren auch die Vorträge recht breit gestreut. Angefangen von Spieleentwicklung am Telefon bis zum Erstellen von Applikationen in der Cloud.

Es ist Teil der Geschäftspolitik von Microsoft, diese Vorträge (Videos und Folien) für jeden zugänglich zu machen – diesen Umstand möchte ich hier hervorheben, ich finde diesen Schachzug toll – davon könnten sich andere Hersteller was davon abschneiden *in Richtung IBM winkt*.

Tja, was fehlt hier noch – richtig, der Link zu den Videos: Videos

Viel Spaß damit, es sind wirklich sehr interessante Themen dabei.

Die Enscheidungskriterien für den richtigen Job als Softwareentwickler

Ich habe einen sehr guten Beitrag im Heise Forum gefunden, der ziemlich gut den „idealen“ Job für einen Softwareentwickler beschreibt:

Link zum Artikel
Link zu dem Beitrag

Viele Entwickler sind zu devot
NO ROM BASIC (534 Beiträge seit 19.02.01)

Viel kann man schon bei der Wahl des Arbeitgebers verhindern:

1.) Anständige Entwickler-Hardware
Eine Firma, die da knausert, knausert auch an allen andern wichtigen Dingen.

2.) Anständige Entwicklerarbeitsplätze
Lautes Grossraumbüro und Batteriehaltung kommt nicht in Frage. Zeigt auch eine lausige Einstellung des Arbeitgebers gegenüber den Entwicklern.

3.) Flexible Arbeitszeiten
Ich nehm mal spontan einen Tag frei, wenns die Arbeit zulässt, dafür arbeite ich wen Not am Mann ist auch mal am Wochenende oder eine Nacht durch.

4.) Deckung von Entscheidungskompetenz und Verantwortung
Ich trage nicht die Verantwortung für Entscheide anderer Leute. Dafür stehe ich immer und mit allen Konsequenzen zu meinen eigenen Entscheidungen.

5.) Realistische Projekte
Ich arbeite nicht an Projekten, die bereits vor Beginn gescheitert sind. Dafür sind mir meine Zeit und meine Nerven zu schade.

6.) Kompetente Vorgesetzte
Ich arbeite nicht unter inkompetenten Chefs. Beachtet man 4.), regelt sich das fast von alleine.

7.) Verbotene Antworten
Drei Antworten auf die Frage „Warum so und nicht anders?“ kommen nicht in Frage:
„Das machen wir schon immer so“
„Das haben wir noch nie so gemacht“
„Da könnte ja jeder kommen“
Alle andern sind OK sofern Begründet.

8.) Konkurrenzfähiges Gehalt
„Wir achten darauf, durchschnittliche Löhne zu zahlen“ = „Wir wollen durschschnittliche Entwickler“

9.) Kompetentes Team
Ich arbeite nicht mit Leuten zusammen, die mit jeder Stunde ihrer Arbeit bei jemand anderem zwei Stunden zusätzliche Arbeit verursachen.

10.) Professionelle Entwicklungsumgebung
Nightbuild mit Unittests, Versionsverwaltung (welche ist mir egal) mit Ordnung drin, konsistente Branch- und Tagstrategie, vernünftiges Bugtracking

11.) Kompetentes Testing
Das Testing soll den Entwicklern arbeit abnehmen, nicht zusätzliche Verursachen weil die Tester zu blöd zum lesen sind. Und Testen heisst nicht nur einmal den Happypath durchspielen.

Ein Arbeitgeber, der obiges nicht erfüllt, ist nicht mein Arbeitgeber. Natürlich muss der Output stimmen. Ich habe Ansprüche, aber im Gegenzug gibts effiziente und gute Arbeit. Fairer Deal. Und die Stellen gibts auch jetzt noch. Vielleicht muss man halt mal eine Übergangslösung eingehen oder einen weiteren Arbeitsweg in Kauf nehmen. Dafür hat man Freude an der Arbeit und kann Teil von erfolgreichen Projekten sein.

Würden mehr Entwickler darauf achten, würden sich viele Dinge schnell einspielen.

Also: Das Leben ist zu kurz für schlechte Arbeitsplätze.

Teamarbeit

Arbeiten in Großen Teams

1. Entscheiden und Realisiern unter Einbindung vieler Personen

Die Willensbildung in Organisationen, und im engeren Sinne die Entscheidungs- und die Konsensfindung, ist längst nicht mehr eine Frage weniger Personen. In vielen Situationen ist die Einbindung vieler Personen in wesentliche Entscheidungen notwendig. Grund dafür ist die fortschreitende Spezialisierung und damit die Zunahme von Abhängigkeiten, nicht nur in Organisationen, sonderen zunehmend auch zwischen Organisationen.

1.1 Zunehmende Arbeitsteilung führt zu Reduktionismus und Umsetzungsschwäche

Spezialisierung hat den Vorteil tieferer Einblicke und präziseren Wissens innerhalb eines Aktivitätsfeldes. Sie führt zu Fokussierung und Konzentration und wirkt dadurch Kompetenz- und Produktivitätsteigernd. Sie bringt aber die Gefahr der reduktionistischen Betrachtung mit sich. Ein Spezialist sieht die Welt eben in der speziellen Optik seines Fachgebietes und beurteilt sie danach. Problemlösungen sind aber nicht immer nur in einem Fachgebiet zu finden, vielmehr ist auch der Beitrag von Fachleuten aus anderen Bereichen notwendig um eine Situation in alles Aspekten zu erfassen und dann auch erfolgreich zu bewältigen.

Read more