Laden...
1
1mannlan myCSharp.de - Member
Fachinformatiker Systemintegration Deutschland, Bayreuth Dabei seit 30.09.2009 88 Beiträge
Benutzerbeschreibung

Forenbeiträge von 1mannlan Ingesamt 88 Beiträge

14.05.2013 - 13:48 Uhr

Hallo,

ich weiß nicht so recht wonach ich suchen soll, denn ich habe folgendes Problem:

Ich entwickle eine WPF-Anwendung welche fast komplett dynamisch erzeugt wird.
Im Konkreten Fall besteht diese nur aus Listen, welche zur Laufzeit dann mit Daten gefüllt werden. Es sieht so ähnlich wie ein Downloadmanager aus, zum Verständnis.

Jetzt habe ich folgendes Problem:

Ich kann ja, da sämtliche Einträge erst zur Laufzeit erzeugt werden, nicht sehen wie das Ergebnis nach Anpassungen am Design aussieht, ohne die Anwendung starten zu müssen.

Gibt es hier eine Möglichkeit die Liste im Designer mit Fake-Daten zu füttern, um zumindest eine Vorschau zu erhalten, wie es am Ende aussehen wird?

Danke im Voraus,

greetz

1mannlan

08.02.2012 - 16:59 Uhr

Das Problem ist dann wohl gelöst, Danke an inflames2k!
(Natürlich auch an die anderen Poster 😃)

08.02.2012 - 15:21 Uhr

Es scheint auch, als würde moveToBin nicht richtig funktionieren, auf der Verschieben von Dateien in den Papierkorb wird auch darauf hingewiesen, das man mit diesem Flag aufpassen muss (Vollständiger Pfadname?!). Das ändern des Flags bringt zumindest beim angeben von Ordnern, die gelöscht werden sollen, keinen Unterschied.

08.02.2012 - 09:43 Uhr

Hallo,

für ein Programm hatte ich schon vor einiger Zeit einen Algorithmus geschrieben, um einen Ordner so vollständig wie möglich zu löschen, das ganze hat aber nicht immer glatt funktioniert und eine aktuellen Status gibt es nicht:

        private bool DeleteCompleteFolder(string Folder)
        {
            bool Errorfree = true;
            foreach (string dir in Directory.GetDirectories(Folder))
            {
                DeleteCompleteFolder(dir);
            }

            //Delete all Files
            foreach (string file in Directory.GetFiles(Folder))
            {
                try
                {
                    File.SetAttributes(file, FileAttributes.Normal);
                    File.Delete(file);
                }
                catch
                {
                    Errorfree = false;
                }
            }

            //Delete emtpy Directory
            try
            {
                File.SetAttributes(Folder, FileAttributes.Normal);
                Directory.Delete(Folder);
            }
            catch
            {
                Errorfree = false;
            }
            return Errorfree;
        }

Ordner werden zwar meist gelöscht, manchmal kommt es aber vor, das ein löschen nicht möglich ist, im zweiten Anlauf klappt es dann.

Nun war meine Idee dem ganzen vielleicht auf komplett anderem Wege entgegenzuwirken.

Wäre es nicht möglich das löschen Windows zu überlassen? Damit würde ich sämtliche fliegen mit einer Klappe schlagen (Fortschritt usw...)
Etwas hatte ich dazu gefunden:
Code-Snippet: Datei mittels Windows Dialog löschen
Nur kann ich mit VB Code nicht wirklich was anfangen, ein VB zu C# Converter bringt keinen lauffähigen Code.

Oder habt ihr vielleicht eine bessere Idee?

28.07.2011 - 14:08 Uhr

Um es genauer zu sagen muss es auch nicht umbedingt der Status Command sein, blos habe ich nicht das nötige wissen um zu sehen wie es z.B. bei Tortoise gelöst wurde. Dort gefällt mir das eigentlich ganz gut.

27.07.2011 - 14:29 Uhr

Öhh fällt mir gerade auf ich habe mich beim Titel vertippt, das ganze ist SharpSvn.
Oder kann es sein das dort jemand editiert hat? Im Bookmark heißt es weiterhin "Sharpsvn Status" worums ja auch geht...

27.07.2011 - 13:00 Uhr

Hallo,

ich hatte damals schon in einem anderen Thread nebenbei gefragt wie mein bei dem Command '.Checkout' die gedownloadeten Dateien erhält.
Diesen löse ich nach wie vor mit:


SvnClient Client = new SvnClient();
Client.CheckOut(new Uri(Url), Folder);

Nun hatte ich in einem Backgroundworker Filewatcher angelegt, welche dann den Ordner des Checkouts auf neue Dateien überwachen und diese Ausgeben.
Das ganze funktioniert zwar im Prinzip zieht aber viel Leistung und bedarf einigen Aufwandes.
Nun muss ja der Svn Client wissen welche Dateien er gedownloaded hat, deshalb habe ich ein bisschen gegoogelt und bin immer wieder auf folgendes gestossen:


SvnClient Client = new SvnClient();
EventHandler<SvnStatusEventArgs> statusHandler = new EventHandler<SvnStatusEventArgs>(HandleStatusEvent);
            Client.Status(Folder, statusHandler);

void HandleStatusEvent(object sender, SvnStatusEventArgs args)
        {
            switch (args.LocalContentStatus)
            {
                case SvnStatus.Added: // Handle appropriately
                    listBox1.Items.Add("+ " + args.FullPath);
                    break;

                case SvnStatus.Modified:
                    break;

                case SvnStatus.Deleted:
                    break;
            }

            // review other properties of 'args'
        }

Nur kriege ich beim Checkout einfach nicht die Dateien sondern nur den Obersten Ordner ausgeworfen, was mir nichts bringt. Hat jemand damit schon mal gearbeitet und kann mir helfen?

25.07.2011 - 08:36 Uhr

Sorry das ich jetzt erst wieder schreibe, war zu beschäftigt.
@MrSparkle
Das Tool von dir setzt auch auf rsync und hat deshalb den gleichen Bug, dennoch bietet es ein schöneres GUI Planung usw. an.
Ich habe im Tool die Funktion Synchronisation entdeckt, wenn ich damit in einem Temp Verzeichnis immer alle aktuellen Dateien bereithalte lässt sich dieser vielleicht umgehen. Werde das mal Testen und dann hier berichten.

15.07.2011 - 22:36 Uhr

Es geht hier eben um eine Lösung mein Programm auf den User Rechnern ohne großartige strapazen zu installieren. Wie bereits oft genannt, andere Programme können das ja auch.

15.07.2011 - 13:02 Uhr

Die Sache ist die, das das Programm bei jedem Start einen Registry Wert abfragt, der angibt wohin die Daten gespeichert werden müssen. Das ganze könnte ich noch per Config Datei aushebeln, was aber wichtiger ist, das zum bespiel wenn der Pfad "C:\Programme\TestAnwendung" gewählt wurde sämtliche Überordner Schreibrechte haben müssen, also z.B. ""C:\Programme\TestAnwendung\Einstellungen", "C:\Programme\TestAnwendung\Addons" usw...
in diesen Ordner werden dann vom Desktop oder bzw. Download Ordner herraus Dateien hinein kopiert oder direkt per Svn Clienten Installiert. Hoffe es ist jetzt etwas klarer.

15.07.2011 - 10:32 Uhr

Naja da fast jede Aktion des Programms Adminrechte dann erfordern würde wäre das eher Sinnlos. Die Frage war eher ob man das nicht direkt per Installer oder so vom vornherein lösen kann, das diese nicht benötigt werden.

15.07.2011 - 09:53 Uhr

Das Problem ist das wer sich das Programm oben im Link angeschaut hat, es sich um eine Art Manager von Addons handelt.
Dafür wird aus der Registry ein Schlüssel ausgelesen, welcher dann den direkten Pfad angibt (Unter C:\Programme).
In dem Ordner befindet sich quasi ein Addonordner in den Dateien kopiert werden müssen. Die Sache mit der Registry ließe sich vielleicht noch umgehen, zwingender Schreibzugriff jedoch nicht.

14.07.2011 - 16:34 Uhr

Mein Programm macht folgendes: Es schreibt Dateien, verändert diese usw. Also wäre hier ein zusätzlicher Dienst nicht sinnvoll, denn fast jeder Knopf würde das ganze weitergeben müssen.
Es geht übrigens um dieses hier:
Garry's Mod Manager

14.07.2011 - 16:06 Uhr

Hey,

da ich kurz vorm Release einer neuen Programm Version eines meiner Projekte stehe fragte mich heute jemand etwas auf das ich keine Antwort wusste.
Mein Programm muss als Administrator ausgeführt werden, logisch es schreibt in die Registry und in "C:\Programme". Für mich logisch aber ein was konnte ich nicht erklären. Wie kann es sein das Programme wie zum Beispiel Tortoise Svn trotz nicht vorhandener Administratorrechte Schreibrechte bekommen egal an welchem Ort? (Checkout z.B.).
Ist es möglich, z.B. durch einen Trusted Installer dem Programm Schreibrechte im Programmverzeichnis usw. einzuräumen? Oder gibt es absolut gar keine andere Möglichkeit?
Klar wäre das ganze nicht ganz im Sinne von UAC, aber irgendwie muss es ja möglich ein, Spiele all diese Programme können ja schließlich auch Screenshots erstellen Fraps Videos usw.

Wäre mal für Antworten dankbar!

14.07.2011 - 09:51 Uhr

Nun das ist aber absolut nicht das was man sich unter einem Backup vorstellt 😉.
Ich muss mal schauen, entweder ich finde eine Lösung zum entsperren der Daten oder nutze differentielle Backups.

14.07.2011 - 07:57 Uhr

Hm...
ich wüsste nicht was mir Schattenkopien bringen sollten, dadurch wird die Datei zum Lesen auch nicht freigegeben.

13.07.2011 - 11:12 Uhr

nein, im Gegenteil. Der einfache Zugriff auf die Daten ist das gute an der Lösung.

Damit meinte ich den Bug, das geöffnete Dateien nicht kopiert werden können.

13.07.2011 - 11:05 Uhr

Klar das nicht jedes Backup eigenständig sein kann, aber rsync gaukelt genau das vor, heißt man sieht für jedes Teilbackup ein Vollbackup. Interessanter wäre jedoch das mit dem Archivbit, klingt nämlich nach einem nicht zu unterschätzendem Problem.
Das Problem an der Lösung an c't ist eben der Zugriff auf die Daten, wie siehts dort mit Archivbit aus?

13.07.2011 - 10:48 Uhr

Die Sache ist die, das beim Inkrementellen Backup alle vorhergehenden Sicherungen benötigt werden. Backup Excec beschreibt: "Inkrementell - Seit letzem vollständigen oder inkrementellen Backup geänderte Dateien sichern".
Klingt für mich nach, es wird immer das letzte Backup hergenommen, denn eine zweite Box was man nun möchte ist dort nicht.
Zum Thema differentiell bin ich auf das hier gestoßen:
Backup-Archivbit-Problem (umbenannte oder verschobene Verzeichnisse)
Ist dies bei Windows Server 2008 r2 auch so? Dann wäre ja die Datensicherheit nicht gewährleistet.

13.07.2011 - 10:26 Uhr

Also in Backup exec was wir hier haben gibt es eine solche Funktion, wie gut das funktioniert muss ich mal testen, das mit den Ordner die direkt alle als Voll-Backup angezeigt werden sieht halt gut aus.
Ein differentielles Backup wäre denke ich schon das sinnvollste, es werden alle Veränderungen zum Voll-Backup gesichert right?

13.07.2011 - 10:15 Uhr

@mo#
Wie es scheint erstellt das aber keine Versionsabfolge. Das rsync jedoch klingt wirklich nach der Lösung, der einzige wenn auch fatale Haken ist eben das man keine geöffneten Dateien sichern kann, ob das so funktioniert muss ich mal schauen.
Im Notfall wird eben der Gesamte Bestand erst umkopiert und dann gesichert.

13.07.2011 - 08:10 Uhr

Es geht wenn da nicht richtig klar wurde um Versionierte Backups. Heißt:
Tag 1:
Es wird ein Vollbackup angelegt alle Daten die gesichert werden sollen werden übertragen.
Tag 2-crash:
Es werden alle Änderungen zum vorherigen bzw Hauptbackup übertragen, jedes Teilbackup erhält eine einzelne Versionierung.
Tritt nun am Tag X, sagen wir 634, ein Fehler auf, welcher Daten von Tag 267 benötigt wird folgende Version herausgesucht und wiederhergestellt.
Deshalb kam mir ja auch die Idee mit Subversion was ja im Prinzip genau sowas bietet.

12.07.2011 - 16:33 Uhr

Wenn dies so ist, kennt ihr vielleicht Software die nach dem Prinzip Arbeitet die wir suchen?

12.07.2011 - 14:56 Uhr

Ich hatte nur mal eine Repo erstellt und an googlecode commited, von inkositenzen u.ä. wusste ich nichts. Wie treten diese auf?
Werden nicht einfach Dateien die z.B. in Rev +1 nicht mehr existieren einfach nicht mehr hochgeladen? (Beispiel)

Oder hättet ihr eine andere Idee wie man das ähnlich mit Versionierung lösen könnte?

12.07.2011 - 14:46 Uhr

Gedacht ist das ganze Nachts, wenn keiner mehr Arbeitet durchzuführen, dann werden einfach die bearbeiteten Daten hochgeladen so die Vorstellung.
Vom Prinzip klingt das für mich einfach so als wäre subversion wie dafür gemacht, bis auf das die Daten nicht auf Binärebene abgeglichen werden.

12.07.2011 - 14:42 Uhr

Nunja wenn ganze Dateien übertragen würde wäre das nicht so schlimm, ansonsten müsste man eben einen Speziellen Dienst hierfür nutzen. Die Datenmenge außer acht gelassen ließe sich somit eine Menge Geld sparen die Frage ist eher ob das überhaupt möglich wäre, auch wenn das viele Daten rüber müssten, besser als 100 Voll Backups auszulagern meine ich.

12.07.2011 - 12:22 Uhr

Online Backups wie Strato bietet auch die Datev an, in diesem Falle käme Datev in Frage. Mir ist klar das die .svn Ordner beim Checkout den Doppelten Speicherbedarf benötigen, jedoch habe ich ein Script was diese in Sekunden löschen könnte.
Die Sache ist die, das die Wiederherstellungsdaten nicht auf der Quelle gelagert würden, heißt, wenn man Daten wiederherstellt bleibt die Basis frei von .svn Ordnern. Außerdem wird ja im Falle einer Datenwiederherstellung nicht das komplette Backup neu gezogen sondern nur einzelne Verzeichnisse.
Eingesetzt wird Windows Server 2008 r2, die Sicherung umfasst Datenbanken usw.
Wenn ich mich nicht täusche lädt subversion die Änderungen auf Bitlevel auf den Server? Oder täusche ich da?

Den Vorteil würde ich in der Versionierung sehen, denn so könnte man ohne großen Aufwand quasi jeden Bestand wiederherstellen.

12.07.2011 - 11:12 Uhr

Hallo,

für unsere Firma suchen wir zur Zeit ein neues System zur Datensicherung.
Aktuell wird auf Tagesbänder (Mo, Di, Mi, Do, Fr) + 2 Monatsbänder gesichert.
Nun möchten wir das ganze jedoch ändern.
Dabei kam mir die Idee das ganze müsse sich doch eigentlich per Subversion erledigen lassen.
Heißt im Klartext:
Unser Standort bekommt eine Standleitung (um die 20Mbit) und ein externer Standort hat die Backup Server. Ein Initialbackup wird durchgeführt (um die 400Gbyte).
Nun wird jeden Tag per commit eine Tagessicherung übertragen, angenommen ca. 1Gb Daten werden geuploaded. Das ganze sichert nun also täglich per commit, hätte man ca. 2Tbyte platten verbaut wäre das genug für 2 Jahre und man könnte zwischendrin immer noch komplett Backups auf Band sichern. Das wiederherstellen sollte ja dann einfach per Version möglich sein, was haltet ihr von dieser Idee?

Für Vorschläge usw. wäre ich dankbar!

13.06.2011 - 17:00 Uhr

Hat denn keiner eine Idee dazu?

10.06.2011 - 10:58 Uhr

So, ich habe nun den Code Komplett überarbeitet. Es funktioniert nun recht gut, blos eben weiß ich nicht wie ich den Status Speichern kann fordert der Client zur Aktion auf.

Client:

using System;
using System.Net.Sockets;

public class Client
{
    static public void Main(string[] Args)
    {
        TcpClient socketForServer;
        socketForServer = new TcpClient("192.168.215.17", 53287);
        NetworkStream networkStream = socketForServer.GetStream();
        System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
        System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);

        string outputString;
        {
            outputString = streamReader.ReadLine();
            Console.WriteLine("Ram: " + outputString + " MB");

            streamWriter.WriteLine("toggle");
            streamWriter.Flush();
        }

        networkStream.Close();
        Console.ReadLine();
    }
}

Server:

using System;
using System.Net;
using System.Net.Sockets;
using System.ComponentModel;

public class AsynchIOServer
{
    public static void Main()
    {
        TcpListener tcpListener = new TcpListener(IPAddress.Any, 53287);
        tcpListener.Start();
        while (true)
        {
            Console.Clear();
            Socket socketForClient = tcpListener.AcceptSocket();
            BackgroundWorker bgworker = new BackgroundWorker();
            bgworker.DoWork += bw_DoWork;
            bgworker.RunWorkerAsync(socketForClient);
        }
    }

    static void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        Socket netSocket = (Socket)(object)e.Argument;
        if ( netSocket.Connected)
        {
            Console.WriteLine("Client connected");
            NetworkStream networkStream = new NetworkStream(netSocket);
            System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
            System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
            Console.WriteLine("Data sent");
            streamWriter.WriteLine("233");
            streamWriter.Flush();

            if (streamReader.ReadLine() == "toggle")
            {
                Console.WriteLine("Server status toggled!");
                e.Result = "toggled";
            }
            streamReader.Close();
            networkStream.Close();
            streamWriter.Close();
        }
        netSocket.Close();
        Console.ReadLine();
    }
}

Das ganze sieht jetzt zwar deutlich sauberer aus, aber ich bekomme das Result nicht aus dem Worker hinaus. Würde ich es in die Obere while-Schleife bekommen könnte ich dem Worker einen anderen Parameter übergeben der dementsprechende dann anders reagiert.
Ist es das wo ich scheitern sollte?

10.06.2011 - 10:33 Uhr

Ich habe mir Multithreading in C# zum größten Teil einmal durchgelesen. Auch wenn ich ihn schon kannte kam es mir so vor als dass der BackgroundWorker eigentlich genau das machen würde was ich bräuchte. Das er zum Threading gehört hatte ich erst gar nicht so wahrgenommen. Ich denke ich könnte diesen nutzen und bei beenden der Aufgabe etwas zurück an die Aufrufsmethode geben, in der dann der Schalter für Aktiv oder inaktiv und gleichzeitig der aktuelle Stand wieder in den nächsten Worker übergeben wird. Denkt ihr das könnte so funktionieren oder habe ich mit größeren Problemen zu Rechnen?

(Ich werde jetzt mal damit anfangen und wenn es klappen sollte Rückmeldung geben, wenn nicht natürlich auch 😛. Sollte während meiner Arbeit jemand hier Posten das es damit Sinnlos wäre muss ich mir noch mehr Stoff reinziehen. Ich brauche ja eigentlich nur ein paar Basis Methode, Synchronisation usw. wird ja alles nicht benötigt.)

10.06.2011 - 08:14 Uhr

Dann werde ich mal ins Threading einarbeiten. Könnte mir trotzdem jemand einen Ansatz geben? Sonst kann ich hier nicht weitermachen -.-.

09.06.2011 - 14:46 Uhr

Zum Beispiel welche?

09.06.2011 - 13:51 Uhr

Ich habe mich vorher nie richtig mit Threading und Sockets beschäftigt. Mein Ziel ist folgendes:
Client Verbindet sich mit Server, versucht Daten abzurufen:

TcpClient socketForServer;
        try
        {
            socketForServer = new TcpClient("192.168.215.17", 53287);
            NetworkStream networkStream = socketForServer.GetStream();

            byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes("toggle");
            networkStream.Write(dataBuffer, 0, dataBuffer.Length);

            System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
            Console.WriteLine("Pc: " + streamReader.ReadLine());
            networkStream.Close();
        }
        catch
        {
            Console.WriteLine("Pc: Error!");
        }
        Console.ReadLine();

Nun Überprüft der Server nach dem Verbinden ob der Client Daten schickt, wenn ja setzt es eine Variable um, wenn nicht gibt er Antwort.
Klar das das mit try catch unsauber ist, aber das ganze hat sich immer bei

int receivedDataLength = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);

festgefressen wenn nichts gesendet wurde.

09.06.2011 - 13:16 Uhr

Hi,

für ein kleines Projekt habe ich eine Möglichkeit gesucht an einem Port zu horchen, das ganze habe ich soweit hinbekommen. Hier im Forum bin ich auf diesen Post gestoßen:
[Tutorial] Windows Services mit C#

Habe das ganze angepasst und funktioniert auch soweit ich es möchte. Nun habe ich das ganze aber abgeändert, bestimmt nicht die beste Lösung aber solange es funktioniert gut:

internal class DataSender
        {
            bool deactivated;
            public void SendDataToClient(object client)
            {
                TcpClient networkClient = (TcpClient)client;
                NetworkStream networkStream = networkClient.GetStream();

                // Check to see if this NetworkStream is readable.
                networkStream.ReadTimeout = 10;

                byte[] myReadBuffer = new byte[1024];
                try
                {
                    int receivedDataLength = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
                    string stringdata = Encoding.ASCII.GetString(myReadBuffer, 0, receivedDataLength);
                    if (deactivated)
                    {
                        deactivated = false;
                        Console.WriteLine("New Status: active!");
                    }
                    else
                    {
                        deactivated = true;
                        Console.WriteLine("New Status: deactivated!");
                    }
                }
                catch
                {
                    int FreeMem = 0;
                    PerformanceCounter freeMem = new PerformanceCounter("Memory", "Available Bytes");
                    FreeMem = Convert.ToInt32(freeMem.NextValue() / 1024 / 1024);
                    if (deactivated)
                    {
                        byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes("locked");
                        networkStream.Write(dataBuffer, 0, dataBuffer.Length);
                        Console.WriteLine("Nothing sent, locked!");
                    }
                    else
                    {
                        byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(FreeMem.ToString());
                        networkStream.Write(dataBuffer, 0, dataBuffer.Length);
                        Console.WriteLine("Sent Data: " + FreeMem);
                    }
                }

                networkStream.Close();
                networkClient.Close();                
            }
        }

Ich sende also nichtnur, sondern prüfe auch ob Anfragen ankommen, Verbindet sich der Client und sendet innerhalb von 10ms nichts wird abgebrochen und ein Wert gesendet. Sendet der Client etwas wird "deactivated" umgeschaltet. So die Theorie, die Praxis ist aber anders, denn bei jeder Anfrage erhält der Client einen neuen Thread. Wie bekomme ich jetzt aus dem alten Thread das ganze in den neuen?

10.04.2011 - 17:44 Uhr

Nunja wenn der Aufwand so hoch ist werd ichs lassen, ich dachte nur das 3,5Mb ziemlich aufgebläht wären für eine Datei, ich brauche ja nur die 2 Funktionen.
Ok, danke schon mal ich gucke mal nach, aber zum Zweiten habe ich so gut wie nichts gefunden, hat das hier jemand schon mal genutzt kann mir vielleicht ein Paar Tipps geben?

08.04.2011 - 11:45 Uhr

Hallo,

da ich für mein Projekt immer die Fertig Kompilierte svn.exe der neusten Subversion genutzt habe lief bis jetzt alles glatt.
Das ganze brauch so ca. 4,3Mb und besteht aus 18 Dateien. Ein bisschen viel wie ich finde. Nun wollte ich SharpSvn stattdessen nutzen. Gesagt getan, ging. (Bis auf einen Punkt siehe weiter unten). Jetzt habe ich eine .dll mit knapp 3,8Mb, zwar weniger aber immer noch recht viel wie ich finde. In der .dll sind ja sämtliche Funktionen wie "commit" "export" usw enthalten, für mich relevant sind aber nur die "update" und "checkout" Funktion. Gibt es da eine Möglichkeit die .dll so zu beschneiden alles außer die beiden rauszunehmen und somit Platz zu sparen, oder direkt eine Alternative zu SharpSvn?
Zum zweiten Punkt, ich starte das Checkout ja per:

.CheckOut(new Uri("www.link.de"),"c:\\test");

Gibt es eine Dokumentation oder ein Tutorial wo steht wie man während des Checkouts die hinzugefügten Daten sehen kann? (Checkout + Update).
Weil so wartet man 30 Sekunden und bekommt dann erst Meldung.

Danke im Vorraus!

1mannlan

18.03.2011 - 16:48 Uhr

Jetzt geht es, ich danke dir.
Ich denke es lag daran das ich den Ordner nicht vorher erstellt habe, nehme ich das bei deinem raus macht er das gleiche wie mein Code auch.
Mit der Ergänzung funktioniert meins auch.
z.B. "C:\PlayX.svn", wird mit Substring gekürtzt auf ".svn" und anschliessen als neuen Pfad ausgegeben:
C:\Backup.svn

 Directory.CreateDirectory(Path.GetDirectoryName("C:\\Backup\\" + (item.Substring(Hauptpfad.Length))));
                Directory.Move(item, "C:\\Backup\\" + (item.Substring(Hauptpfad.Length)));

...Liefert demnach das gleiche Ergebnis, es lag also am Ordner erstellen, dafür besten dank.

Das ganze sieht nun so aus und funktioniert:

        private void Form1_Load(object sender, EventArgs e)
        {
            OrdnerSuchen(Hauptpfad);
        }

        private void OrdnerSuchen(string Pfad)
        {
            foreach (string svn in Directory.GetDirectories(Pfad))
            {
                if (svn.Contains(".svn"))
                {
                    if (svn.Length == (Pfad.Length + 5))
                    {
                        string backupPath = Path.Combine("C:\\Backup\\" + (svn.Substring(Hauptpfad.Length)));
                        Directory.CreateDirectory(Path.GetDirectoryName(backupPath));
                        Directory.Move(svn, backupPath);
                    }
                }
                else
                {
                    OrdnerSuchen(svn);
                }

            }
        }
18.03.2011 - 12:26 Uhr

Nein die Addons stammen nicht von mir, mein Programm lädt diese nur herunter und die .svn Ordner werden leider versteckt und mit Schreibschutz (Inhalt auch) erstellt.
(Macht der SVN-Command-line-client und auch jedes andere SVN Programm so.)

18.03.2011 - 11:18 Uhr

*Edit

Es liegt mit höchster Wahrscheinlichkeit am Schreibschutz, warum bringt mir der Compiler keine Meldung?
Habe jetzt folgendes versucht:

        private void SetzeAttribute(string Hauptpfad)
        {
            foreach (string svn in Directory.GetDirectories(Hauptpfad))
            {
                if (svn.Contains(".svn"))
                {
                    if (svn.Length == (Hauptpfad.Length + 5))
                    {
                        File.SetAttributes(svn, FileAttributes.Normal);
                        foreach (string files in Directory.GetFiles(svn))
                        {
                            File.SetAttributes(files, FileAttributes.Normal);
                        }
                    }
                }
                SetzeAttribute(svn);
            }
        }}

Bekomme aber den Schreibschutz nicht richtig weg, ausserdem sollen die Ordner unsichtbar bleiben.

18.03.2011 - 10:55 Uhr

Also, ich brauche auch wirklich nur die Ordner die .svn Ordner enthalten, was aber eigentlich eh wurst ist, weil jeder einen .svn Ordner enthält.
Zum Thema Tortoise-SVN. Nein ich setze auf einen Command Line SVN Clienten. Das Programm ist dieses hier:
(Ist ein Programm was Addons für Garrysmod Installiert, welches durch die .svn Ordner ausgebremst wird.)
http://gmod.de/threads/28425-Garrysmod-Manager
Ich möchte eine Funktion bauen sämtliche .svn Ordner auszuschneiden das ganze Später auch Rückwärts.
Nur finde ich es jetzt ein bisschen umständlich wenn ich es richtig verstehe erstmal alle Ordner einzulesen, dann zu erstellen und anschliessen die Dateien zu verschieben und die Ordner wieder zu löschen.
Das einfache verschieben wie es ja eigentlich gehen sollte ist deutlich effizienter.
Es gibt ja auch noch andere Dateien die nicht kopiert werden sollen.

Den Code habe ich nochmal angepasst selber Zweck, selbes Problem:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string Hauptpfad = "C:\\PlayX";
        string Backuppfad = "C:\\Backup";
        List<string> Liste = new List<string>(); 
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            OrdnerSuchen(Hauptpfad);

            foreach (string item in Liste)
            {
                MessageBox.Show(item.Replace(Hauptpfad, Backuppfad));
                Debug.Assert(Directory.Exists(item.Replace(Hauptpfad, Backuppfad)));
                Directory.Move(item, item.Replace(Hauptpfad, Backuppfad));
            }
        }

        private void OrdnerSuchen(string Pfad)
        {
            foreach (string svn in Directory.GetDirectories(Pfad))
            {

                if (svn.Contains(".svn"))
                {
                    if (svn.Length == (Pfad.Length + 5))
                    {
                        Liste.Add(svn);
                    }
                }
                else
                {
                    OrdnerSuchen(svn);
                }

            }
        }


    }
}

*edit
Selbst wenn ich das Liste.Add(svn); durch Directory.Delete(svn); ersetze passiert nichts, ich versteh nun garnichtsmehr.

18.03.2011 - 10:41 Uhr

Das Problem ist ja das ich nicht einfach die Ordner verschieben möchte sondern die Ordnerstruktur beibehalten möchte.
Wenn also im Original "C:\PlayX\lua.svn" galt soll der neue Pfad "C:\Backup\lua.svn" sein. Zur Performance habe ich bereits im letzten Post was gesagt, das Programm was den Ordner verwendet bzw. das Addon durchsucht aufgrund der vielen .svn Ordner ausgebremst wird.

18.03.2011 - 10:05 Uhr

#Anhang 2 (PlayX Ordner)

18.03.2011 - 10:04 Uhr

Ich habe das ganze mal umgeschrieben komme aber trotzdem nicht zum gewünschten Ergebnis.
Habe mal das Projekt und den Ordner welcher auf C:\ liegen muss in den Anhang gelegt.
Ordner C:\Backup müsste erstellt werden.
Performancegründe liegt daran das das Programm welches dann drauf zugreift deutlich mehr Daten hat = deutlich erhöhte Ladezeit

17.03.2011 - 20:05 Uhr

Problem ist das ich obwohl ich eine Arraylist mit den Korrekten Pfaden habe, das ganze einfach nur die erste Datei kopiert. Ich werde morgen mal das Beispiel hochladen inklusive der Testdaten. Seltsam ist ja das es keinerlei Fehler ausspuckt.
Liegt es vielleicht daran das die Zielverzeichnisse nicht existieren? Aber normal werden die doch erstellt oder es gibt ggf. eine Meldung aus.

17.03.2011 - 16:32 Uhr

Sowas hatte ich auch schon versucht, mit einer Arraylist, nur bringt das leider das gleiche Ergebnis.
Den Export nehme ich nicht, weil ich nicht die Gedownloadeten Dateien doppelt auf der Platte haben will, es geht eher ums wie und nicht warum 😄.

17.03.2011 - 16:12 Uhr

Die Sache ist die das man sie aus Performancegründen löschen muss/sollte.
Das will ich ja auch nicht tun, sondern sie verschieben um sie später wiederherstellen zu können. Der Nutzen ist quasi nur für die Verständlich, die damit arbeiten.

17.03.2011 - 15:47 Uhr

Hallo,

da ich für mein Projekt SVN nutze habe ich wie auch jeder das allbekannte Problem das der Client .svn Ordner erstellt. Nun dachte ich mir ich möchte die Ordner nicht einfach löschen was ja nicht das Problem wäre, sondern ich wollte ein Programm schreiben was sie Exportiert und die Struktur erhält. Ich habe also folgendes gebastelt:

    public partial class Form1 : Form
    {
        string Hauptpfad = "C:\\PlayX";
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            OrdnerSuchen(Hauptpfad);
        }

        private void OrdnerSuchen(string Pfad)
        {
            foreach (string svn in Directory.GetDirectories(Pfad))
            {
                if (svn.Contains(".svn"))
                {
                    if (svn.Length == (Pfad.Length + 5))
                    {
                        Directory.Move(svn, "C:\\Backup\\" + (svn.Substring(Hauptpfad.Length)));
                        MessageBox.Show(svn, "C:\\Backup\\" + (svn.Substring(Hauptpfad.Length)));
                    }
                }
                else
                {
                    OrdnerSuchen(svn);
                }
            }
        }

(if (svn.Length == (Pfad.Length + 5)) bewirkt das Ordner wie C:\PlayX.svn\Ordner übersprungen werden.)

Mein Problem ist jetzt, das er zwar alle Ordner inklusive Pfad auflistet nehme ich den Teil mit dem verschieben raus, bleibt er jedoch drin scheint es als nimmt er nur den ersten Ordner verschiebt diesen und bricht ab.
Ich stehe da jetzt wirklich auf dem Schlauch eine Idee woran es liegen kann?

12.02.2011 - 17:27 Uhr

Hey,

da es mich schon immer stört das VLC wohl offenbar nicht in der Lage ist das Titelbild aus einer MP3 richtig zu lesen hatte ich mir ein Tool gebastelt. Läuft im Hintergrund und löscht wenn VlC aus ist, die Datei welche das Art enthält. Funktioniert soweit so gut, nun wollte ich das ganze aber auch während der Laufzeit. Das Problem ist, die Datei muss gelöscht werden bevor das neue Lied geladen wird, ansonsten wird keine neue erstellt.
Ich habe zunächst versucht anhand des Fenstertitels auszulesen ob sich das Lied ändert:

                Process[] myProcesses = Process.GetProcessesByName("vlc");
                foreach (Process myProcess in myProcesses)
                {
                    if (myProcess.MainWindowTitle == "VLC media player")
                    {
                        DeleteArt();
                    }
                    else
                    {
                        if (myProcess.MainWindowTitle != LastSong && LastSong != "VLC media player")
                        {
                            DeleteArt();
                            LastSong = myProcess.MainWindowTitle;
                            notifyIcon1.ShowBalloonTip(1, "Lied geändert.","Albumbart wird neu geladen",ToolTipIcon.Info);
                        }
                    }
                }

Ich hoffe das ist halbwegs verständlich. Nur leider funktioniert das ganze nicht. VLC ändert das Lied, nur leider reagiert das Programm zu spät und es wird zwar die Art gelöscht aber VLC erstellt keine mehr. Da nun die Frage:

Kann ich den Aufruf: .mp3, wenn er an VLC gesendet wird, was ja wohl mit %1 geschieht (Mitgabe des Dateinamens) Irgentwie Abfangen? Dann könnte ich die Art löschen und anschließend den Aufruf erneut tätigen.
Hoffe ich habe mich verständlich ausgedrückt und vielleicht habt ihr ja eine Lösung.

Schonmal Danke im vorraus.

10.02.2011 - 11:42 Uhr

Nun will ich aber, wenn richtig verstanden nicht unte immer sowas wie Progressbar 1
Progressbar 2 usw. schreiben müssen.
Ich hab dann bis jetzt:
Oben:


        List<Progressbars> pgs = new List<Progressbars>();

und ganz unten:

        struct Progressbars
        {
            ProgressBar p;            
        }

Vielleicht stell ich mich nur zu blöd an, aber wie kriege ich jetzt alle vorhandenen (keine feste anzahl) an Progressbars in die Liste?