2011. február 24., csütörtök

.NET okosságok

AssocQueryString
http://www.pinvoke.net/default.aspx/shlwapi/AssocQueryString.html
(Paraméterekről bővebb infó: http://msdn.microsoft.com/en-us/library/bb773471(VS.85).aspx ) Az exe útvonalának visszaadása mellett más, hasonló adatok (pl. alkalmazás “friendly” neve”) kinyerésére is alkalmas a módszer.

How to use FindExecutable from C#
http://it.toolbox.com/blogs/paytonbyrd/how-to-use-findexecutable-from-c-3324
Nem elég csak a kiterjesztés, hanem teljes útvonalat, létező fájlt igényel. Mivel mi jelenleg előbb határozzuk meg az alkalmazást, mint letöltjük a fájlt, ezért nem ideális. Ráadásul a hosszú fájlnevekkel is gondjai lehetnek (http://support.microsoft.com/kb/140724)

Get default application in Windows XP or Vista with VB.NET
http://windevblog.blogspot.com/2008/09/get-default-application-in-windows-xp.html
Kicsit macerás megoldás a többihez képest, közvetlen registry buherálás VB.NET-ben.

GetApplicationPath - Retrieve the path of a Windows application from the Registry
http://www.devx.com/vb2themax/Tip/19151
Ismert nevű alkalmazás helyét keresi meg (pl. Excel.exe). Local machine-t használ, de egyedi beállítások lehetnek a current user alatt is.

Ez még hasznos lehet, ha a csatolmányok mellett valamikor (V2, V3, … V42) a hozzájuk rendelt ikont is meg akarjuk jeleníteni az alkalmazásban:
Get Registered File Types and Their Associated Icons in C#
http://www.codeproject.com/KB/cs/GetFileTypeAndIcon.aspx

Megjegyzem, találtam olyan írást, ami alapján performancia problémák lehetnek az általunk eddig használt ProcessStartInfo alapú megoldással:
Get application associated with a file extension (registry?)
http://bytes.com/topic/visual-basic-net/answers/369011-get-application-associated-file-extension-registry


A feladat másik része a kiadás kapcsán adódott, ahol a placeholder helyére a szövegbe be kellett szúrni a CSV fájl tartalmát. A sportszerű nehezítés az volt, hogy nem simán, vesszővel elválasztva, hanem az egymást követő oszlopokat megfelelő szóköz mennyiséggel kitöltve, hogy egy adott oszlop valamennyi sorban azonos karakter pozíciónál kezdődjön. Mivel a CSV parsing nem mindig merül ki az egyszerű, “vessző mentén szétvágom, oszt’ kész” megközelítésben (ld., vesszőt, idézőjelet tartalmazó értékek esete), és nem akartam feltalálni a melegvizet, inkább felhasználtam az itt leírt megoldást:
A Fast CSV Reader
http://www.codeproject.com/KB/database/CsvReader.aspx
A szükséges library-t kód szinten tettem be a solutionbe (ld.: Core/3rd party/ LumenWorks.Framework.IO) és kisebb kiegészítéseket is eszközöltem rajta. Felhasználást ld.: Mti.Mnp.Util / Utils.cs / ReadFormattedCsvFile metódus, amit a Live.Custom.cs-ben a NewsItemDetails BodyTokensReplace property-jében hívunk a tokenek kicserélésére. A kiadásnál a Body helyett ezt a property-t használjuk. Leadben jelenleg by design nem cserélünk, ha valaki oda tesz tokent, az bebukta.

Nincsenek megjegyzések:

Megjegyzés küldése