<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sandromark78 &#187; c#</title>
	<atom:link href="http://sandromark78.it/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://sandromark78.it</link>
	<description>The official blog of &#34;Sandro Marcon&#34;</description>
	<lastBuildDate>Wed, 07 Apr 2010 21:34:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Dertiminare/verificare se un path (stile Microsft Windows) è assoluto (in C#)</title>
		<link>http://sandromark78.it/informationtechnology/dertiminareverificare-se-un-path-stile-microsft-windows-e-assoluto-in-c/</link>
		<comments>http://sandromark78.it/informationtechnology/dertiminareverificare-se-un-path-stile-microsft-windows-e-assoluto-in-c/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 16:02:58 +0000</pubDate>
		<dc:creator>Sandro Marcon</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[regular expression]]></category>

		<guid isPermaLink="false">http://sandromark78.it/?p=254</guid>
		<description><![CDATA[Sembra una stupidaggine, ma una funzione esplicita per fare questo non esiste, o meglio, non funziona proprio come si deve. Il metodo del Microsoft .Net frame work in questione è Path.IsPathRooted. Sono riuscito a scovare questa funzione grazie a questo post. Ma più che il post in se stesso, la cosa più interessante è il [...]]]></description>
			<content:encoded><![CDATA[<p>Sembra una stupidaggine, ma una funzione esplicita per fare questo non esiste, o meglio, non funziona proprio come si deve.</p>
<p>Il metodo del <em>Microsoft .Net</em> frame work in questione è <a title="Link to relative MSDN page" href="http://msdn.microsoft.com/en-us/library/system.io.path.ispathrooted.aspx" target="_blank"><em>Path.IsPathRooted</em></a>. Sono riuscito a scovare questa funzione grazie a questo <a href="http://dotnetdud.blogspot.com/2008/10/check-if-path-is-absolute-or-relative.html" target="_blank">post</a>. Ma più che il post in se stesso, la cosa più interessante è il primo commento che apapre nella pagina: la funzione <em>Path.IsPathRooted</em> considera il path &#8220;<em>\temp\</em>&#8221; come assoluto!</p>
<p>Diciamo che la cosa non va per nulla bene! Sebbene ci abbia perso un po&#8217; di tempo, non sono riuscito a trovare una spiegazione al caso.</p>
<p>Date le circostanze, si è reso necessario sviluppare un’apposita funzione che svolga il lavoro: qui di seguito il codice.</p>
<pre class="brush: csharp; title: ; notranslate">
public static bool isAbsolutePath(string sPath)
{
string sPattern = @&quot;^[a-zA-Z]:\\&quot;;
Regex R = new Regex(sPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);

return R.IsMatch(sPath);
}
</pre>
<p>Per compilare il tutto, ricordarsi di includere il namespace <em><a href="http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.aspx" target="_blank">System.Text.RegularExpressions</a></em>.</p>
<p>Attenzione che la funzione non determina se un path è sintatticamente corretto (vedere <a href="http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/">post precedente</a>): si limita a verificare &#8220;come inizia&#8221; per capire se è assoluto o meno. Il funzionamento è poi limitato solo a path locali alla macchina: non vengono gestiti path <a href="http://en.wikipedia.org/wiki/Path_(computing)#Uniform_Naming_Convention" target="_blank">UNC</a>.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://sandromark78.it/informationtechnology/dertiminareverificare-se-un-path-stile-microsft-windows-e-assoluto-in-c/"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://sandromark78.it/informationtechnology/dertiminareverificare-se-un-path-stile-microsft-windows-e-assoluto-in-c/" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://sandromark78.it/informationtechnology/dertiminareverificare-se-un-path-stile-microsft-windows-e-assoluto-in-c/" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://sandromark78.it/informationtechnology/dertiminareverificare-se-un-path-stile-microsft-windows-e-assoluto-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verificare la correttezza sintattica dei path con .Net</title>
		<link>http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/</link>
		<comments>http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 18:00:50 +0000</pubDate>
		<dc:creator>Sandro Marcon</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://sandromark78.it/?p=246</guid>
		<description><![CDATA[Pochi giorni fa mi sono imbattuto nel seguente problema: verificare che una certa stringa contenga un path (di file o directory) valido o corretto. Ho scoperto che molti sviluppatori confondono la correttezza o validità con l’esistenza o meno della “risorsa” (file o directory) “descritta” dal path stesso. La correttezza o validità sintattica del path è, [...]]]></description>
			<content:encoded><![CDATA[<p>Pochi giorni fa mi sono imbattuto nel seguente problema: verificare che una certa stringa contenga un path (di file o directory) valido o corretto. Ho scoperto che molti sviluppatori confondono la correttezza o validità con l’esistenza o meno della “risorsa” (file o directory) “descritta” dal path stesso. La correttezza o validità sintattica del path è, ovviamente, “platform dipendente”. Un path valido per la piattaforma GNU/Linux non lo è di certo per la piattaforma Microsoft Windows!</p>
<p>Esempio di path (assoluto) valido per piattaforma Microsoft:</p>
<pre class="brush: bash; title: ; notranslate">
c:\pippo\pluto\paperino
</pre>
<p>Esempio di path (assoluto) valido per piattaforma GNU/Linux:</p>
<pre class="brush: bash; title: ; notranslate">
/home/house/flat
</pre>
<p>Non è detto che la risorsa &#8220;descritta&#8221; da un path esista o no, ma i due esempi in precedenza esposti sono sicuramente sintatticamente corretti (per le rispettive piattaforme indicate).  Ora, com&#8217;è possibile verificare la correttezza sintattica di un path nella piattaforma Microsoft ed utilizzando il framework .Net? In rete si trova un po&#8217; di tutto, soprattutto si capisce, come accennavo all&#8217;inizio, che molta gente non è capace di inquadrare il problema.</p>
<p>Esempio di path (assoluto) non valido per piattaforma Microsoft:</p>
<pre class="brush: bash; title: ; notranslate">
hug:\\\pippo\\pluto\paperino
</pre>
<p>Una soluzione possibile è quella di utilizzare le regular expression: non così banale però definire la regola corretta! Quelle che ho trovato in rete sono di certo incomplete: un path può essere assoluto o relativo!  Un soluzione veloce, forse non troppo elegante è quella che vi propongo qui di seguito.</p>
<pre class="brush: csharp; title: ; notranslate">
private bool checkPathValidity(string sPath)
{
try
{
new FileInfo(sPath);

return true;
}
catch
{
return false;
}
}
</pre>
<p>Al fine di far funzionare correttamente il tutto, vi ricordo di includere il namespace System.IO (che definisce FileInfo).</p>
<p>Sebbene, dal mio punto di vista, non è buona cosa utilizzare l&#8217;occorrenza o meno di un&#8217;eccezione per determinare lo &#8220;stato&#8221; di qualcosa, la soluzione proposta è sicuramente completa e corretta. Mi riservo su eventuali problemi di concorrenza: al momento non riesco a trovarne, ma è meglio sempre mettere le mani avanti su queste cose! <img src='http://sandromark78.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://sandromark78.it/informationtechnology/verificare-la-correttezza-sintattica-dei-path-con-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#&#8217;s const vs. readonly</title>
		<link>http://sandromark78.it/informationtechnology/cs-const-vs-readonly/</link>
		<comments>http://sandromark78.it/informationtechnology/cs-const-vs-readonly/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 08:30:12 +0000</pubDate>
		<dc:creator>Sandro Marcon</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://sandromark78.it/?p=155</guid>
		<description><![CDATA[È da un po&#8217; che mi chiedevo quale fosse la differenza tra le due keyword c# const e readonly. Ho trovato un interessante post di Patrick Steele che spiega sinteticamente ed esaustivamente le peculiarità di queste due parole riservate. Qui di seguito ne riporto la traduzione in italiano. Una variabile definita const: non può essere [...]]]></description>
			<content:encoded><![CDATA[<p>È da un po&#8217; che mi chiedevo quale fosse la differenza tra le due keyword c# <strong>const </strong>e <strong>readonly</strong>. Ho trovato un interessante <a href="http://weblogs.asp.net/psteele/archive/2004/01/27/63416.aspx" target="_blank">post</a> di <a href="http://weblogs.asp.net/psteele/default.aspx" target="_blank">Patrick Steele</a> che spiega sinteticamente ed esaustivamente le peculiarità di queste due parole riservate.</p>
<p>Qui di seguito ne riporto la traduzione in italiano.</p>
<p>Una variabile definita <strong>const</strong>:</p>
<ul>
<li>non può essere anche <strong>static</strong>;</li>
<li>il suo valore è determinato in fase di compilazione;</li>
<li>può essere inizializzata solo nella sua dichiarazione.</li>
</ul>
<p>Una variabile definita <strong>readonly</strong>:</p>
<ul>
<li>può essere anche <strong>static</strong>;</li>
<li>il suo valore è determinato a run-time;</li>
<li>può essere inizializzata sia nella sua dichiarazione che dal costruttore della classe.</li>
</ul>
<p>Più che evidente che le due keyword non sono proprio così intercambiabili.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://sandromark78.it/informationtechnology/cs-const-vs-readonly/"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://sandromark78.it/informationtechnology/cs-const-vs-readonly/" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://sandromark78.it/informationtechnology/cs-const-vs-readonly/" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://sandromark78.it/informationtechnology/cs-const-vs-readonly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

