Laden...

Forenbeiträge von cyntonix Ingesamt 37 Beiträge

20.01.2015 - 09:39 Uhr

Vielen Dank erstmal für die vielen Antworten und Tips.

Abt hat Recht, ich will weniger mich schützen eher den User.

Uglify hab ich kurz angeschaut, hänge aber noch bisl da Abhängigkeiten fehlen. Wenn ich es zum laufen bekomme dann Committe ich es mal.
Denke da stimmt mit IronJS was nicht.

Leider habe ich eben keine andere Möglichkeit als die CS-Datei im Hauptprogramm (welches von einem dritten ist) zu laden.

19.01.2015 - 15:34 Uhr

Es gibt kein Assembly.
Die *.cs-Dateien werden an Kunden weitergegeben.

Ich verspreche mir ein "bisschen mehr" Schutz dadurch, dass Änderungen nicht so einfach gemacht werden können.

19.01.2015 - 11:20 Uhr

Mir ist bekannt dass es keinen 100% Schutz gibt. Dennoch möchte ich es jemand schwer machen, der den Code verändern möchte.

Bezüglich Referenzen:
Hier gibt es kein Problem, da alles wie beschrieben in einer Datei vorhanden sein muss.

Es würde mir reichen wenn alle Variablen und Methoden umbenannt werden, aber wie gesagt, können die aufgelistet Obfuscator die nur auf DLLs bzw. EXE.

19.01.2015 - 08:35 Uhr

Hallo Zusammen,

ich suche einen Obfuscator welcher die Sourcedateien verändert.
Ich habe schon einige getestet (List of obfuscators for .NET), leider gehen diese davon aus, dass eine DLL oder EXE geschützt wird.

Hintergrund:
Die Dateien werden in einem Programm als API-Erweiterungen geladen. Hier ist es nur möglich eine *.cs-Datei zu laden.
Ich habe auch schon getestet eine DLL zu kompilieren und diese dann zu obfuscaten, danach das Decompilat zu laden, aber hier klappt auch was nicht, da in dotPeek einige Issues angezeigt werden.

Hat jemand Tipps bzw. einen möglich Workflow?

Danke im Voraus.

28.11.2014 - 09:14 Uhr

Hallo Zusammen,

ich schleppe das Problem nun schon bei zwei Projekten mit und habe noch keine Lösung, darum muss ich nach Hilfe bitten.

Anbei ein Projekt welches mir mehrere Fehler / Probleme aufzeigt. Meiner Meinung nach hängen Sie aber alle Zusammen.

Ich habe ein WPF-Projekt in dem ich ein UserControl einbinde, welches in einem anderem Projekt in der Projektmappe liegt.

Binde ich dieses UC ein, bekomme den Fehler dass dieses nicht gefunden wurde. Komischerweise tritt dieser Fehler nur sporadisch auf. Der Designer zeigt keine Vorschau, aber baue ich es, startet es mit erwartetem UI.
Die Einbindung ist:


xmlns:errorList="clr-namespace:ErrorList;assembly=ErrorList"
...
<errorList:ErrorListControl x:Name="errors"/>

Der zweite Fehler, welcher immer erscheint ist eine Ressource (Converter), welche ich z.B. in der App.xaml hinterlege:


    <Application.Resources>
        <demoResourceProblem:ValueToBackgroundColorConverter x:Key="valueToBackground" />
    </Application.Resources>

Bei der Verwendung (DatagridColumn soll farbig anzeigen ob die Anzahl positiv/negativ ist):


<Setter Property="Background" Value="{Binding Count, Converter={StaticResource valueToBackground}}" />

... erhalte ich folgende Fehler:> Fehlermeldung:

Fehler 1 Der Name "ValueToBackgroundColorConverter" ist im Namespace "clr-namespace:DemoResourceProblem" nicht vorhanden. \...\DemoResourceProblem\App.xaml 7 9 DemoResourceProblem

Fehler 2 Ein Objekt vom Typ "System.Object" kann auf eine Eigenschaft, die den Typ "System.Windows.Data.IValueConverter" erwartet, nicht angewendet werden. \...\DemoResourceProblem\App.xaml 17 67 DemoResourceProblem

Fehler 3 Der Name "ValueToBackgroundColorConverter" ist im Namespace "clr-namespace:DemoResourceProblem" nicht vorhanden. \...\DemoResourceProblem\App.xaml 1 1 DemoResourceProblem

Verzweifle hier ein bisschen. Habe natürlich nach diesen Verhalten gegoogelt, und nur die Tips gelesen, das Zielsystem / Framework umzustellen:
Namespace not found
xmlns assembly Erweiterung

Vielen Dank schon im Voraus!

21.06.2011 - 14:41 Uhr

Ich habe jetzt einfach mal die PHP-Variante getestet da es wahrscheinlicher ist dass diese performanter ist...
gebe die Pfade direkt aus und hole mir den Inhalt in C#

function getDirectory( $path = '.', $level = 0 ){ 

    $ignore = array( 'cgi-bin', '.', '..' ); 
    // Directories to ignore when listing output. Many hosts 
    // will deny PHP access to the cgi-bin. 

    $dh = @opendir( $path ); 
    // Open the directory to the handle $dh 
     
    while( false !== ( $file = readdir( $dh ) ) ){ 
    // Loop through the directory 
     
        if( !in_array( $file, $ignore ) ){ 
        // Check that this file is not to be ignored 
             
            $spaces = str_repeat( '&nbsp;', ( $level * 4 ) ); 
            // Just to add spacing to the list, to better 
            // show the directory tree. 
             
            if( is_dir( "$path/$file" ) ){ 
            // Its a directory, so we need to keep reading down... 
             
                // echo "<strong>$spaces $file</strong><br />"; 
                getDirectory( "$path/$file", ($level+1) ); 
                // Re-call this same function but on a new directory. 
                // this is what makes function recursive. 
             
            } else { 
 
				$link = str_replace("./files/","http://www.xxx.de/files/",$path);
				$link = "$link/$file";
				
				
				
                echo "$link<br/>"; 
                // Just print out the filename 
             
            } 
         
        } 
     
    } 
     
    closedir( $dh ); 
    // Close the directory handle 

} 

Wie gesagt bin ich in php garnicht fit ... habe bestehende lösung angepasst.
Für Anregungen bzgl. php-code bin ich sehr offen!

DANKE

Gruß
cyn

21.06.2011 - 09:10 Uhr

Hallo zusammen,

ich bräuchte kurz eure Meinung 😃

Wir müssen auf unserem FTP-Server öfters einen Prüflauf ausführen welche bzw. ob Dateien vorhanden sind.
Ich prüfe zuerst ob die gesuchte Datei vorhanden ist:


        public bool FTPFileExists(string FilePath)
        {
            FtpWebRequest req = (FtpWebRequest)WebRequest.Create(sFtpUrl + FilePath);
            req.Credentials = new NetworkCredential(sFtpUser, sFtpPassword);
            req.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            try
            {
                FtpWebResponse resp = (FtpWebResponse)req.GetResponse();
                resp.Close();
                return true; // File exist
            }
            catch
            {
                return false; // File doesn’t exist
            }
        }

... aber das dauert je nach Tagesform unserer Internetleitung eine weile.
(Ich habe keine Möglichkeit gefunden nicht jedesmal für eine Datei einen neuen Request zu machen. Vorschläge wie ich dies beschleunigen kann?)

Nun möchte ich generell vor dem Start der Überprüfung ein Filelisting erstellen welche alle Dateien in einem Ordner (Unterordner einbezogen) erstellt.

Mir ist die Listingfunktion bekannt, habe aber Angst dass ich hier an perfomance nicht viel gewinne.
Eine fertige Funktion / Methode habe ich leider nicht gefunden um dies zu testen. Das zu programmieren bekomme ich schon hin.

Nun zu meiner konkreten Frage:
Da auf dem Server auch PHP läuft könnte ich dies auch als PHP-Script machen und beim Aufruf der php-Datei ein Listing Ausgeben. Leider bin ich hier nicht so fit.
**- soll ich dies in php realisieren und in meiner c#-anwendung einlesen?

  • soll ich ein listing per c# holen und danach prüfen**

Es kann sein dass paar mal im Jahr eine Überprüfung mit 5000 Dateien stattfindet. Macht das was aus wenn ich 5000x auf den FTP per request "einprügle"? Nicht das dieser meint ich mach ne "attacke" 😃

Vielen Dank für eure Meinung

Gruß
cyn

07.03.2011 - 15:54 Uhr

Da der Code nicht mehr gepostet wurde, stellt sich für mich noch die Frage wie der Prozess angezeigt werden kann.
Soviel ich verstanden habe (MSDN) muss ich mit ShowWindow die Form aufrufen. Leider ist dies aber nicht verfügbar (steckt das nicht in der user32 ?!).

Anbei mein Code zum Aufrufen des Prozesses:

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr SetParent(IntPtr child, IntPtr newParent);

        Process proc = new Process();

        private void Form1_Load(object sender, EventArgs e)
        {
            proc.StartInfo.FileName = FILENAME;
            proc.StartInfo.UseShellExecute = true;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.Start();
            proc.WaitForInputIdle();

            IntPtr processWindowHandle = proc.MainWindowHandle;
            SetParent(processWindowHandle, this.Handle);
            
            ShowWindow(SW_SHOWMAXIMIZED, 3); //FEHLER
        }

Danke schon mal 😃

Gruß
cyn

25.01.2011 - 11:04 Uhr

Vielen Dank. Weiß nicht warum ich das nicht gefunden habe. Keywords waren richtig 😕

(Ironie ist aber nicht sehr nett)

Grüße

25.01.2011 - 09:16 Uhr

Vielen Dank erstmal.
Versuche die Woche den Code zu übersetzen, bin aber nicht so fit in VB.
Bitte Thema noch offen lassen!

Danke!
Gruß
cyn

24.01.2011 - 09:28 Uhr

Hallo,

ich möchte gerne einen Prozess (z.B. PDF-Datei) starten und in der Applikation anzeigen lassen.
Funktionsweise Ähnlich wie im Browser in einem Frame.
Das Programm soll als Datei-Viewer für MSG und PDF-Dateien dienen.
Man könnte die Dateien auch nativ in .NET einlesen, die Anwender möchten aber ihre "Standardprogramme" verwenden, welche nicht immer gleich sind.
Über Process.Start() kann ich das ganze realisieren, aber es sollte im Programm geschehen.
Nach langem Googlen habe ich nichts gefunden.

Vielen Dank schon mal!

Gruß
cyn

08.10.2010 - 12:33 Uhr

Danke an alle für die Hilfe!
(Mir sind Denkanstöße lieber, da der Lerneffekt höher ist. Dennoch hab ich nicht genau gewusst wie ich ansetzen soll).

Nun funktioniert das ganze. Aber ich frage mich warum meine Lösung nicht funktioniert hat... denn normalerweise ist doch der Fullpath dann gleich aber ich bekam kein true... warum?

Danke noch mal!
Gruß
cyn

07.10.2010 - 17:17 Uhr

Ok. Danke erstmal an alle für die Hilfe.
Nun ist es aber so:
wenn ich auf den Button drücke, der die Notes entfernt und hinzufügt dann steht in TreeView.SelectedNode.Name nix (""). Warum?
ich durchlaufe alle Nodes und dann frag ich sie ab:


            foreach (TreeNode node in tvDateien.Nodes)
            {
                node.Name = node.FullPath;
            }

            oldSelectedNode = tvDateien.SelectedNode.Name;

            // Nodes Löschen & Hinzufügen

            TreeNode[] tn = tvDateien.Nodes[0].Nodes.Find(oldSelectedNode, true);
            for (int i = 0; i < tn.Length; i++)
            {
                tvDateien.SelectedNode = tn[i];
                tvDateien.SelectedNode.BackColor = Color.Yellow;
            }

Problem ist das (string) oldSelectedNode leer ist 😦

07.10.2010 - 10:43 Uhr

habs nun mal so probiert:


           oldSelectedNode = tvDateien.SelectedNode.Text;
           
// Löschen und wieder hinzufügen von allen Nodes

            TreeNode[] tn = tvDateien.Nodes[0].Nodes.Find(oldSelectedNode, true);
            for (int i = 0; i < tn.Length; i++)
            {
                tvDateien.SelectedNode = tn[i];
                tvDateien.SelectedNode.BackColor = Color.Yellow;
            }

passiert garnix ...
Im Array sind auch keine Elemente... er findet also nix ... (Node ist aber vorhanden)

07.10.2010 - 10:01 Uhr

Hallo,

nach ewiger Suche bei Google und hier im Forum frage ich einfach mal 😃
Ich habe einen Treeview mit Nodes. Die markierte Node soll gespeichert werden. Nun lösche ich alle Nodes aus dem Treeview und fülle ihn mit den gleichen Nodes (test).
Die gespeicherte (alte) Node soll nun ausgewählt werden.
Leider passiert ... garnix. Beim debuggen sieht aber alles korrekt aus.
Hab schon verschiedene Möglichkeiten durchgespielt:

1.


            TreeNode oldSelectedNode = tvDateien.SelectedNode;
            // Löschen und wieder befüllen
            tvDateien.SelectedNode = oldSelectedNode;


            string oldSelectedNode = tvDateien.SelectedNode.FullPath;
            Suchen("");
            foreach (TreeNode node in tvDateien)
            {
                if (node.FullPath == oldSelectedNode)
                {
                    tvDateien.SelectedNode = node;
                }
            }

Danke schon mal!
Gruß
cyn

06.08.2010 - 07:52 Uhr

Danke erstmal für die Hilfe...

Mit dem Snippet von Dir im anderen Thread funktioniert es (Danke, hab den Thread aber nicht gefunden).

Meine Lösung:
bin schon bisl weiter gekommen. Kurz erweiterte erklärung:
Ich fülle den Treeview aus einem Listview heraus:

            TreeNode RootNode = new TreeNode("Root");
            tvDateien.Nodes.Add(RootNode);

            foreach (ListViewItem livi in liviDateien.Items)
            {
                string file = livi.SubItems[0].Text + ".ema";
                string folder = livi.SubItems[1].Text;
                PopulateTreeView(folder, file, RootNode);
            }
        public void PopulateTreeView(string folder, string file, TreeNode Node)
        {
            TreeNode FolderNode = new TreeNode(Path.GetFileName(folder));
            Node.Nodes.Add(FolderNode);
 
            TreeNode FileNode = new TreeNode(Path.GetFileName(file));
            FolderNode.Nodes.Add(FileNode);
        }

Jetzt wird aber immer nur die letzte Ebene erzeugt und dort die Datei eingefügt.
Ist ein Ordner 2x vorhanden wird dieser auch 2x angezeigt.

Danke nochmal!

05.08.2010 - 16:17 Uhr

Hi Leute,

ich bräuchte mal ein bisschen Hilfe bzw. einen Wink mit einem großen Zaunpfahl:

Hab ein Array mit Dateien (Pfad + Dateiname + Endung).
Möchte das ganze im Treeview darstellen. Hab versucht jeden string zu splitten und dann die Nodes hinzuzufügen.
Nun hab ich aber das Problem dass die Pfade so aussehen können:
C:\baum\ast\blatt.txt
C:\ast\baum\blatt.txt

hier sollte es 2 Haupt-Nodes geben: baum und ast.

Wie prüfe ich ob es die Node und Unternodes schon gibt?
Hab hier im Forum und Google schon alles durchgeschaut aber nix gefunden.

Wäre über ein Snippet o.Ä. sehr dankbar.

Gruß
Cyn

16.06.2010 - 09:20 Uhr

Hallo Leute,
Ich fülle einen Datatable mit Daten aus Excel (OLEDB).
Dann setze ich einen Primärschlüssel auf eine Spalte (Davor entferne ich die Zeilen welche im Primärschlüssel leer sind).
Das funktioniert alles wunderbar.


                    oledbConn.Open();
                    OleDbCommand oledbCmd = new OleDbCommand(sqlExcel, oledbConn);
                    OleDbDataAdapter da = new OleDbDataAdapter(oledbCmd);
                    da.Fill(ds, tblProject); // Hier wirft er den Fehler beim 2. Mal

                    // Leere Zellen entfernen
                    foreach (DataRow rowDelete in ds.Tables[tblProject].Rows)
                    {
                        string srowDelete = rowDelete[3].ToString();
                        if (srowDelete == "")
                        {
                            rowDelete.Delete();
                        }
                    }
                    // Primärschlüssel
                    ds.Tables[tblProject].PrimaryKey = new DataColumn[] { ds.Tables[tblProject].Columns[3] };
                    ds.Tables[tblProject].AcceptChanges();

Nun möchte ich das ganze Rücksetzen damit ich z.B. den Vorgang wiederholen kann:


            ds.Tables[tblProject].PrimaryKey = null;
            ds.Clear();

Wenn ich den Vorgang wiederhole (gleiche Datei einlesen) wirft das Programm einen Fehler welchen ich nicht nachvollziehen kann (verstehen schon):

ConstraintException:
Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen.

Das Problem ist dass nun eine Leerzeile vorhanden ist (welche beim 1. Durchlauf aber gefunden und gelöscht wurde).
Ich denke dass der Primärschlüssel das Problem erzeugt.

Was zudem noch suspekt ist:
Wenn ich die Exception abfange und nochmals zurücksetze und den Vorgang (Einlesen) wiederhole, dann funktioniert es.

Warum funktioniert es beim 2. Einlesen der gleichen Datei nicht, aber beim 1 + 3 - nten Mal schon?

Danke schon Mal für eure Hilfe!!

Gruß
Cyn

wenn ich dann alles zurücksetze

04.05.2010 - 10:09 Uhr

Hallo Leute,
Ich fülle ein Excel-Dokument (welches schon existiert) mit dem Inhalt eines Datatables.

Das funktioniert soweit ganz gut. Nun möchte ich aber für jede neu eingefügte Zeile das Format von der Zeile 4 kopieren bzw. beibehalten (ab Zeile 4 wird der Datatable eingefügt).

Ich werde wohl um eine Range-Instanz nicht drumrum kommen...
(Außer ich kopiere immer die Zeile 4 und füge den Inhalt ein, was aber wohl nicht so eleganz ist)

Leider weiß ich nicht wie ich das Format einer Zelle/Zeile kopieren kann.
In MSDN steht immer nur wie ich einzelne Werte (in den Beispiel bolt) zuweise.
Ich möchte aber von Zelle x,y das Format kopieren und in Zelle n,n einfügen.

Danke schon mal
Gruß
Cyn

28.04.2010 - 17:10 Uhr

@ herbivore:
zum Link: das ist leider nicht genau das wonach ich suche. Ich suche nach einer Möglichkeit die pro Datensatz Artikelnummer und Menge von datagridview 1

  • auszulesen
  • im anderen datagridview2 zu suchen
  • diesen Datensatz auslesen
  • Differenz bilden

(das weiterverarbeiten schaff ich allein)

nur fehlt mir hier irgendwie der Gedankenanstoß, da ich sowas noch nie gemacht habe.

Danke schon mal für eure weiter Hilfe (nett hier)

Gruß
Cyn

28.04.2010 - 16:04 Uhr

@inflames2k:
Ich möchte einen Mengenvergleich machen:

  1. View
    Artikelnummer: 0815
    Menge: 5

  2. View
    Artikelnummer: 0815
    Menge: 6

  3. View
    Artikelnummer: 0815
    Menge: -1

(BTW. Meine lieblingsband)

@ herbivore:
Schau ich mir an...

@ ErfinderDesRades
ich behandle alles als Strings (außer bei der Mengenrechnung werde ich wohl Integer brauchen 😉 )
Muss da nicht großartig aufpassen, da ich über eine API ne Textfile bekomme und die später wieder zurückschiebe, die Konvertierung erfolgt "auf dem Weg"

@ ALL:
Vielen Dank nochmal. Ich melde mich wieder 😉 👍

28.04.2010 - 14:44 Uhr

Hallo an Alle,

ich kämpf seit 2 Tagen schon damit, darum habe ich mir mal gedacht, ich frage hier nach.
Hab sehr viel gegoogelt und auch schon einige Sachen lösen können.
Meine Aufgabe:

  • einlesen von 2 Textdateien in jeweils separaten Datagridview
  • Dort gibt es eine ID (Artikelnummer) welche eine Mengenangabe hat (Anzahl); Die restlichen Spalten sind beschreibend und eigentlich nicht zu beachten
  • Nun möchte ich die Differenz von Datagridview 1 - Datagridview 2 bilden (Menge)
  • ich lese das ganze mit einer OdbcConnection ein damit ich das ganze im Dataset habe

Nun könnt ihr auf dem Screenshot sehen das ich es zumindest geschafft habe die Dateien einzubinden (Dank CodeProject)

Leider weiß ich nichtmal eine Richtung in der ich Suchen/Gehen sollte um die Differenz zu bilden.
Kann mir einer mal paar Schlagwörter/Codeauszüge/Beispiele sagen? Ich möchte hier nicht um fertigen Code fragen aber leider weiß ich garnicht wo ich hinschaun sollte =)

Vielen Dank schonmal
Gruß
Cyn

27.11.2009 - 11:25 Uhr

Hallo,
ich habe eine Liste (txt) welche Mehrere Dateien auflistet (Pfad/Dateiname.Extension):
\Server01\Pfad\Datei.txt

Nun kopiere ich alle Dateien und möchte die Dateien auflisten welche nicht vorhanden sind. Das funktioniert.
Um das ganze übersichtlicher zu gestalten möchte ich In meinem Datagridview 2 Spalten haben:
Dateiname | Kompletter Pfad

Jetzt wollte ich vom Kompletten Pfad den Dateinamen über GetFileName herausfinden. Das funktioniert aber nur wenn die Datei vorhanden.

Jetzt hab schon versucht bei einem bestimmten Zeichen zu Splitten aber die Ordneranzahl ist variabel. Ansonsten hätte ich an n-ten "&quot; Splitten können.

Hat jemand einen Lösungsansatz?

16.11.2009 - 07:52 Uhr

@herbivore: Muss dir Recht geben...
Meine Frage war ziemlich ungenau ausgedrückt, was für keinen Hilfreich ist.

Wie geht man vor, wenn man in Windows einen bestimmten Dialog aufrufen möchte? Wie sucht man die .dll Dateien (Google konnte mir nicht weiterhelfen).
Gibt es evtl. einen Eventhandler, der mir anzeigt was gerade ausgeführt wurde und mit welchen Parametern?

Danke

13.11.2009 - 07:39 Uhr

Vielen, vielen Dank!
Kannst du evtl den Code noch bisl Kommentieren? Habe gestern abend alles mal durchgegoogelt was ich nicht verstanden habe.
Wie war deine Vorgehensweise, um die Funktion zu ermöglichen? Ich wusste garnicht wie ich das anpacken muss...

Danke noch Mal!

12.11.2009 - 14:38 Uhr

Leider weiß ich nicht mal einen Lösungsansatz.
Denke dass es evtl. über die Registry gehen würde...

Weiß keiner einen Rat? Wäre wirklich wichtig 🤔

12.11.2009 - 10:29 Uhr

Hallo,

ich möchte gerne von meinem Programm aus den Dialog für die Druckereinstellungen öffnen. Dieser ist zu finden unter Systemsteuerung/Drucker und Faxgeräte/[Druckername]/Eigenschaften/Druckereinstellungen.

Der Druckername ist variabel.
Weiß jemand wie ich den Dialog öffnen kann?

Danke schon Mal!
Gruß
Cyn

11.11.2009 - 07:54 Uhr

Wunderschönen guten Morgen,
Ich drucke mehrere Dateien über die Kommandozeile in meinem Programm:


        private static void PrintFile(string fullPath)
        {
            FileInfo fileInfo = new FileInfo(fullPath);

            if (!fileInfo.Exists)
            {
                throw new FileNotFoundException();
            }

            var printProcess = new Process();
            printProcess.StartInfo.FileName = fullPath;
            printProcess.StartInfo.UseShellExecute = true;
            printProcess.StartInfo.Verb = "print";
            printProcess.Start();
        }

Leider finde ich nirgends eine Möglichkeit den Druckerauszuwählen. Es wird immer der Standarddrucker verwendet.
Weiß jemand einen Parameter oder eine Möglichkeit den Drucker einzustellen?

Ich habe mich schon in Printdocuments eingelesen, aber da ich unterschiedliche Dateitypen (PDF,XLS) drucken möchte, ist das (nach meinen Wissenstand) die bessere Lösung.

Gruß
cyn

11.11.2009 - 07:42 Uhr

Ich habe die Ehre mein Problem selber zu lösen:
Da die Datei noch geöffnet wird, verzögert sich das ganze so, dass die Druckaufträge durcheinandergeraten.
Darum habe ich eine Pause eingebaut (1sek war zu wenig --> 2sek)

            foreach (string sPrintFile in this.checkedListBox1.CheckedItems)
            {
                PrintFile(sPrintFile);
                System.Threading.Thread.Sleep(2000);
            }
10.11.2009 - 15:49 Uhr

Hallo Leute,

ich möchte gerne alle Dateien in einem Ordner drucken. Das ganze soll noch selektierbar sein in einem CheckedlistView.
Bin nun soweit dass man die Reihenfolge im Listview auch verändern kann...
Leider werden die Dokumente nicht nach der Reihenfolge gedruckt wie sie im Listview sind.
Beispiel:
Hab einen Ordner der 3 Dateien enthält:
test1.txt
test2.txt
test3.txt

wenn ich nun die Reihenfolge änder in:
test3.txt
test2.txt
test1.txt

wird gedruckt:
test2.txt
test1.txt
test3.txt

(Auch wenn die Reihenfolge nicht geändert wird, werden die Dateien nicht alphanumerisch gedruckt).
Ich habe auch den Index überprüft das müsste gehen, leider weiß ich nicht wie das foreach das Steuerelement abarbeitet.
Danke schon mal!

Anbei die Codeteile:

Einlesen der Dateien in ListView:

            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                checkedListBox1.Items.Clear();
                txtPath.Text = folderBrowserDialog1.SelectedPath;

                string[] slFiles = Directory.GetFiles(txtPath.Text);

                foreach (string sFile in slFiles)
                {
                    checkedListBox1.Items.Add(sFile);
                }            
            }

Verändern der Reihenfolge (Item Up)

            int i = this.checkedListBox1.SelectedIndex;
            bool b = false;
            object o = this.checkedListBox1.SelectedItem;

            if (i > 0)
            {
                if (checkedListBox1.GetItemCheckState(i) == CheckState.Checked)
                {
                    b = true;
                }

                this.checkedListBox1.Items.RemoveAt(i);
                this.checkedListBox1.Items.Insert(i - 1, o);
                this.checkedListBox1.SelectedIndex = i - 1;
                
                if (b == true)
                {
                    checkedListBox1.SetItemCheckState(i-1, CheckState.Checked);
                }
            }

Verändern der Reihenfolge (Item Down)


            int i = this.checkedListBox1.SelectedIndex;
            bool b = false;
            object o = this.checkedListBox1.SelectedItem;

            if (i < this.checkedListBox1.Items.Count - 1)
            {
                if (checkedListBox1.GetItemCheckState(i) == CheckState.Checked)
                {
                    b = true;
                }

                this.checkedListBox1.Items.RemoveAt(i);
                this.checkedListBox1.Items.Insert(i + 1, o);
                this.checkedListBox1.SelectedIndex = i + 1;

                if (b == true)
                {
                    checkedListBox1.SetItemCheckState(i + 1, CheckState.Checked);
                }
            }

Druckfunktion:

        private static void PrintFile(string fullPath)
        {
            FileInfo fileInfo = new FileInfo(fullPath);

            if (!fileInfo.Exists)
            {
                throw new FileNotFoundException();
            }

            var printProcess = new Process();
            printProcess.StartInfo.FileName = fullPath;
            printProcess.StartInfo.UseShellExecute = true;
            printProcess.StartInfo.Verb = "print";
            printProcess.Start();
        }

Alle markierten Dateien drucken:

            foreach (string sPrintFile in this.checkedListBox1.CheckedItems)
            {
                PrintFile(sPrintFile);
            }
06.11.2009 - 10:13 Uhr

So, das ging ja schnell. Ich hab Combine einfach falsch verwendet... So funktionierts 😃
Danke an ALLE!

            List<string> resultCopy = new List<string>();
            foreach (string lineCopy in File.ReadAllLines(sFilelist))
            {
            string sFileName = System.IO.Path.GetFileName(lineFilelist);
            string sdestFile = System.IO.Path.Combine(sTargetPath, sFileName);
            System.IO.File.Copy(lineFilelist, sdestFile, true);
06.11.2009 - 09:47 Uhr

// Edit: Ok Fehler gefunden, hab immer an der falschen Stelle gesucht (Danke @unconnected)
Ich korrigiere das ganze mal... und poste dann das ergebnis

@ujr: Auch mit deaktiviertem Virenscanner geht es nicht Lokal

@Tom: Der ProzessExplorer zeigt mir keinen Prozess an

Da das ganze später im Netzwerk liegt wird es sich nicht vermeiden lassen, dass das Backup mal drüberläuft.
Bin total ratlos. Gibt es eine Möglichkeit das zu umgehen?
Es ist doch auch komisch, dass es bei mir Zuhause und in der Arbeit der gleiche Fall ist (Lokal & Netzwerk).

ich habe meinen Code auf 2 Zeilen reduziert:

                string sdestFile = System.IO.Path.Combine(@"C:\Zielordner\", @"C:\Startordner\test.txt");
                System.IO.File.Copy(@"C:\Startordner\test.txt", sdestFile, true);

Meiner Meinung nach liegt es dann wohl an Path.Combine, da es mit

                System.IO.File.Copy(@"C:\Startordner\test.txt", sdestFile, true);

funktioniert...

06.11.2009 - 09:20 Uhr

Hallo unconnected,

  1. Ja
  2. Ja
  3. Nein

ich mache das ganze gerade übers Netzwerk und habe es lokal auch schon getestet...

06.11.2009 - 09:00 Uhr

Hallo,
erstmal Danke für FileShare-Modus. Hab mich eingelesen, leider ist mein Fall anders:

Ich lese aus der sSourceFile den Dateinamen (kompletter Pfad) aus. Diese Datei soll ins Zielverzeichnis kopiert werden (C:\zielordner).
Beim Kopiervorgang wirft er eine Exception dass er auf die "zu kopierende Datei" nicht zugreifen kann. Aber diese ist definitiv nicht geöffnet bzw. wird von einem anderen Prozess bearbeitet.

Der Prozess kann nicht auf die Datei "C:\test1.txt" zugreifen, da sie von einem anderen Prozess verwendet wird.

Das verwirrt mich und ich weiß leider nicht wo ich zu Suchen anfangen sollte, denn diese Datei wird von meinem Code nicht geöffnet (Die Datei ist sonst auch nicht geöffnet).

05.11.2009 - 19:08 Uhr

[EDIT=herbivore]Abgeteilt von Endswith: Textdatei nach Endungen durchsuchen diese per String List kopieren[EDIT]

So ich habe den Thread um eine Action erweitert, da ich noch eine kleine Frage habe...
Das ganze habe ich jetzt noch erweitert damit ich die Dateien gleich nacheinander kopieren kann.

die sSourceFile hat den Inhalt:
C:\test1.txt
D:\testordner\test2.txt
E:\test3.txt

nun möchte ich diese einelesen und jede zeile abarbeiten. Es soll imm die Datei kopiert werden nach einen bestimmten Zielordner (C:\zielordner)

Leider bricht die Konsolenanwendung immer ab, weil die Datei von einem anderen Prozess verwendet wird. Nach Meiner auffassung müsste das aber File.Copy egal sein weil es ja keinen Exclusive-Recht drauf haben muss...

Hier mein Code:
Nochmals Danke schon im Voraus!

            List<string> listCopy = new List<string>();
            foreach (string lineFilename in File.ReadAllLines(sSourceFile))
            {
                string destFile = System.IO.Path.Combine(@"C:\zielordner", lineFilename);
                System.IO.File.Copy(lineFilename, destFile, true);
            }
05.11.2009 - 13:07 Uhr

wow, so viele Antworten in so kurzer Zeit... Danke @ All

zum Codestück:
Sehr elegant... das mit .toLower kannte ich noch garnicht.

Ich werd mich jetzt mehr einlesen in Stringlisten.

Danke nochmal!

05.11.2009 - 11:57 Uhr

Erstmal vielen Dank an alle... Habe bis jetzt immer über bestehende Threads geschafft meine Probleme zu lösen. Dennoch weiß ich nicht warum meine suche mit Endswith nicht Funktioniert.
Ich bekomme eine Datei in der in manchen Zeilen ein PDF Dokument enthalten ist (Pfad.Extention).
Nun möchte ich nur die Zeilen ausgeben welche mit der Endung .pdf enden (das ganze natürlich case insensitive).
Ich weiß leider nicht wo der fehler ist...
Es wird keine Datei erzeugt. Ich habe davor einen Durchlauf mit Leerzeilensuche, dieser Funktioniert problemlos (hab ich auch hier aus dem Forum)

Danke schon mal


        StreamReader srDescription = new StreamReader(sDokulisteFullFilenameBlankline);
        string sSearchExtension = ".pdf";
        string sDescription = "";
        bool bDescription = false;

        ArrayList arrDescription = new ArrayList();

        while (sDescription != null)
        {
            sDescription = srDescription.ReadLine();

            if (sDescription.EndsWith(sSearchExtension))
                arrDescription.Add(sDescription);
        }
        srBlankLine.Close();
        foreach (string sDescriptionOut in arrDescription) ;

        // Speichern
        System.IO.StreamWriter swDescription = new System.IO.StreamWriter(sDokulisteFullFilenameDescription, false, System.Text.Encoding.Default);
        for (int i = 0; i < arrDescription.Count; i++)
            swDescription.WriteLine((string)arrDescription[i]);
        swDescription.Close();