PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (C#) - Meine erste C# App - "Kleines Tool zur Analyse von MP3 scene releases gesucht"



darkness
15.08.2016, 05:03
Ich habe es jetzt geschafft meine erste "fertige" C# App umzusetzen.

Die App setzt folgendes um "https://www.szenebox.org/129-entwickler-techniker/3213-kleines-tool-zur-analyse-von-mp3-scene-releases-gesucht/" ...

Würde mich freuen wenn mal der ein oder andere sich den Code angucken würde und mir Verbesserungsvorschläge liefern würde. Denke da ist Verbesserungs Potenzial vorhanden. ;)

Attention Required! | CloudFlare (http://www.xup.in/dl,19668280/WindowsFormsApplication1.7z/)

Danke! <3

Bekannte Bugs: Info Ordner wird nicht erstellt wenn der Ordner zu lang ist. Kein Plan was man da machen kann außer das die mps3s in X: liegen

Wünschenswert: Status Anzeige in % | Prozessbar

P.S. Wie kann man den Kram mal nennen?

Hier mal der aktuelle Build: REMOVED

Dachte ich könnte den "Bug" fixxen indem ich anstelle eines Ordners ein File erstelle. Pustekuchen!

Exception thrown: 'System.IO.PathTooLongException' in mscorlib.dll
Der angegebene Pfad und/oder Dateiname ist zu lang. Der vollständig qualifizierte Dateiname muss kürzer als 260 Zeichen und der Pfadname kürzer als 248 Zeichen sein.

Unlimiter
15.08.2016, 07:05
Das ist kein Bug, das ist die von Windows angegebene MAX-PATH (Path + Filename) Länge . Sieht man relativ oft, wenn man Ordner oder Dateien bei langen Pfaden über die GUI kopieren möchte (Backup).

Eigentlich ist das ne ziemlich gute Windoof-Eigenschaft, einfach um bestimmte Performance-Probleme zu vermeiden. Eine saubere Lösung wäre eher dafür zu sorgen, dass der User so etwas nicht machen kann. Sprich wenn der Pfad zu lange wird, sollte eine Warnung erscheinen, dass es bei so einem Vorgehen zu Performance-Problemen kommen kann (Bsp. Indexierung).

Um das Ganze zu umgehen gibt es dabei mehrere Varianten, hier z.B. zwei:
https://gallery.technet.microsoft.com/scriptcenter/DelimonWin32IO-Library-V40-7ff6b16c
https://zetalongpaths.codeplex.com/
Konsole 8.3 Format ( selbst nie getestet, aber muss eigentlich funktionieren, denn sonst könnte man auch über bestimmte commands keine Projekte erstellen)


Trotz allem solltest du es eigentlich tunlichst vermeiden, dass es zu sowas kommt.

GulliGirl
15.08.2016, 08:52
Trotz allem solltest du es eigentlich tunlichst vermeiden, dass es zu sowas kommt.


In diesem Fall hat der Herr Schwammkopf leider keinen Einfluss darauf.
Es gibt einige SceneReleases, die extrem lange Namen haben und die Dateinamen nochmal genausolang sind, sodass schon ohne jegliche Parentfolder die 255 Zeichen gesprengt werden.
Ich spreche da aus Erfahrung :)

Edit:
@Spongebob:
https://msdn.microsoft.com/en-us/library/aa365247.aspx#win32_file_namespaces

maz
15.08.2016, 11:55
Pri longpath einsetzen, das löst das Problem und ist in wenigen Minuten umzusetzen.
Nit Nuget installieren und dann folgenden Code ganz oben einfügen:

using Path = Pri.LongPath.Path;
using Directory = Pri.LongPath.Directory;
using DirectoryInfo = Pri.LongPath.DirectoryInfo;
using File = Pri.LongPath.File;
using FileSystemInfo = Pri.LongPath.FileSystemInfo;

Trotzdem ists wie Unlimiter sagt, lange Pfade sollte man tunlichst vermeiden. Also würde ich auch gleich die Pfade kürzen. Longpath brauchst du aber sowieso, da ds sonnst gar nicht einlesen kannst.

1stAid
15.08.2016, 13:52
Der Download wird durch eine Vierenwarnung verhindert....

darkness
15.08.2016, 15:40
Woran kann die Virenwarnung liegen? Ich kann es nicht nachvollziehen. Da ist nix böses drin. (Zumindest nicht bewusst)

Ja Unlimiter, war falsch ausgedrückt mit dem Bug. Mir ist klar das es eine Windows spezifische Begrenzung ist.
Leider weiß ich nicht wie man das Tool anders für den Kollegen umsetzen soll wie er es sich wünscht.

maz
15.08.2016, 15:50
Ich hab dir doch eine Lösung vorgeschlagen ;)
Virenmeldung ist normal, einfach nicht mit IE laden oder halt ein PW fürs Archiv setzen.

darkness
15.08.2016, 16:30
Ist zu erwarten das sich die Ordner dann über die GUI nicht mehr verschieben / löschen lassen?

- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -


using Pri.LongPath;


public void createInfoFile(string file)
{

using Path = Pri.LongPath.Path;
using Directory = Pri.LongPath.Directory;
using DirectoryInfo = Pri.LongPath.DirectoryInfo;
using File = Pri.LongPath.File;
using FileSystemInfo = Pri.LongPath.FileSystemInfo;

try
{

if (!File.Exists(file))
{
File.CreateText(file);
}

}
catch (Exception e)
{
Console.Write(e.Message);
}

}

Video mit fehlern: http://screencast.com/t/Ecu75aqP

Unlimiter
15.08.2016, 16:59
Wenn du damit dem Win-Explorer meinst: Ja, bei zu langem Pfad und Dateinamen wird es weiterhin zu Komplikationen kommen können.

maz
15.08.2016, 17:13
Usings gehören ganz an den Anfang zu den anderen using.
Du überschreibst damit die orinal Klassen. Der Rest des Codes muss deshalb nicht angepasst werden, was die Idee des ganzen ist


Und natürlich löst das nur innerhalb der App das Probem. Windows Explorer kann die Datei weiterhin nicht wirklich handeln.

y0l0sw4gg3r
15.08.2016, 17:49
Mich würde doch brennend interessieren, warum hier ne Virenwarnung geliefert wird. Ich denke die Frage ist in einem technischen Forum auch ganz legitim.

maz
15.08.2016, 17:55
Einfach weil IE kacke ist. Ist bei meinen Tools auch so. Die Verbreitung ist gleich 0 und es sind unsignierte Applikationen.

Gesendet von meinem ONE E1001 mit Tapatalk

y0l0sw4gg3r
15.08.2016, 17:58
Maz das halte ich für ein grausames Gerücht - und akzeptiere ich hier absolut nicht. Wenn man in der lage ist code zu schreiben, sollte man auch wissen, warum ein Virenscanner nun anschlägt oder nicht.

maz
15.08.2016, 18:00
Ich kann die Hello World Applikation von Microsoft schreiben und dann kommt auch die Virenmeldung.

Natürlich sprechen wir hier von dem im IE integrierten Virencheck. Andere Antivirentools schlagen nicht aus oder informieren blos dass keine Reputation vorhanden ist.

y0l0sw4gg3r
15.08.2016, 18:00
Das spricht nicht für deine Toolchain .....

maz
15.08.2016, 18:05
Oo wir sprechen hier von einer direkt aus dem Visual Studio erstellten Exe und nicht einem Tool das Spongebob weltweit verkaufen möchte.

Aber selbst wenn man sich richtig bemüht und alles signiert und sauber erstellt mit instaler etc. kommen viele Virentools mit einer Warnung. Und das kann man nicht umgehen! Denn die Warnung die zB Norton bringt lautet in etwa: "0-5 User aus der Community nutzen dieses Tool". Und in der Standarteinstellung von Norton werden solche Tools direkt in die Quarantäne verschoben.
Das leuchtet ja auch halbwegs ein, da der 0815 User keine solchen Tools nutzt. Und der versierte User weiss, das eine solche Warnung nichts bedeuten muss.

darkness
15.08.2016, 20:11
? Irgendwie scheint da doch was drin zu sein oO

https://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Trojan%3AWin32%2FSpursint.A&ThreatID=-2147261593

Hab aber 0 Ahnung wie das da rein kommt.

maz
15.08.2016, 20:22
Ne also das Projekt Zip ist absolut clean!
Sagt ja sogar virustotal:
https://virustotal.com/de/file/fc41dd46b8e85883ea65c0532f8acde88a817054a2a20e8d55 25f560417c2a28/analysis/1471288475/

Das Setup Zip ist genau so clean.
https://virustotal.com/de/file/c52e8b31d46f338fc5ecbb016654a67e45ffff71026a84dcad e43e0b7ae04f73/analysis/1471288775/

Nur bringt die exe nichts, da du nicht den Installer von VisualStudio verwenden solltest (vorallem nicht wen er falsch konfiguriert ist, so dass er die Daten von einem nicht existenten Server laden will. Ich würde einfach die EXE liefern + die benötigten dlls. Oder halt mit einem programm wie advenced installer arbeiten.

darkness
15.08.2016, 20:29
using Path = Pri.LongPath.Path;
using Directory = Pri.LongPath.Directory;
using DirectoryInfo = Pri.LongPath.DirectoryInfo;
using File = Pri.LongPath.File;
using FileSystemInfo = Pri.LongPath.FileSystemInfo;

macht den Job!

Danke dafür!

maz
15.08.2016, 20:32
Beim Ausliefern einfach darauf achten, das du zusätzlich zur exe noch die pri longpath dll mitdazu packst. Sonnst läufts nur bei dir.

darkness
05.09.2016, 20:07
Beim Ausliefern einfach darauf achten, das du zusätzlich zur exe noch die pri longpath dll mitdazu packst. Sonnst läufts nur bei dir.


Wie mache ich das denn? Hast mal nen Link für ne Anleitung?

Silentkill
05.09.2016, 21:25
Im Ordner wo du die .exe nach dem compilen findest befinden sich die ganzen dlls.
Einfach alle mitkopieren, die müssen beim starten im selben Verzeichniss wie das Hauptprogramm liegen damit alles läuft.
Grüße

darkness
05.09.2016, 21:47
Ich hab nach dem compilen ja nen Installer der installier normal alles mit.