<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4677157865402141001</id><updated>2012-01-31T14:52:00.482+01:00</updated><category term='linux'/><category term='xml'/><category term='José Manuel Alarcón Aguín'/><category term='xsd'/><category term='Framework 4.0'/><category term='Leyendo'/><category term='fundación tripartita'/><category term='decimales'/><category term='files'/><category term='truncar'/><category term='Notas de lectura'/><category term='nombre meses'/><category term='2005'/><category term='regalos'/><category term='visual studio'/><category term='c#'/><category term='regla'/><category term='formato'/><category term='Tecnologías ASP.NET 4.0 (saltando desde la versión 2.0)'/><category term='serializable'/><category term='DateTime'/><category term='deserializar'/><category term='pixel'/><category term='month names'/><category term='html'/><category term='asp.net 4'/><category term='asp.net'/><category term='concatenar'/><category term='exception'/><category term='RTF'/><category term='richt text format'/><category term='DateTimeFormatInfo'/><category term='ficheros'/><category term='merge'/><title type='text'>Mis Cosas De Punto Net</title><subtitle type='html'>Trozos de código de asp.net, c#, sql,... que encuentro de interés.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-5313985452087762155</id><published>2011-04-14T16:33:00.001+02:00</published><updated>2011-04-15T08:55:02.093+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='decimales'/><category scheme='http://www.blogger.com/atom/ns#' term='truncar'/><category scheme='http://www.blogger.com/atom/ns#' term='formato'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Truncar decimales en C#</title><content type='html'>No deja de ser sorprendente que no hay un método de decimal en C# para truncar decimales. He visto por ahí formas de hacerlo con formatos y al final he optado por multiplicar por 10^decimales, truncar quitando los decimales y volver a dividir entre 10^decimales. Lo necesitaba para poder truncar a 2 decimales, pero me he hecho un método genérico.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private static decimal Truncate(decimal pImporte, int pNumDecimales)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; decimal wRt = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; decimal wPot10 = 1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //for (int i = 1; i &amp;lt;= pNumDecimales; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp; wPot10 = wPot10 * 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wRt = pImporte * wPot10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wRt = decimal.Truncate(wRt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wRt = wRt / wPot10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //wRt = decimal.Round(wRt, 2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return wRt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-5313985452087762155?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/5313985452087762155/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/04/truncar-decimales-en-c.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/5313985452087762155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/5313985452087762155'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/04/truncar-decimales-en-c.html' title='Truncar decimales en C#'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-1883491130228396012</id><published>2011-02-07T12:55:00.000+01:00</published><updated>2011-02-07T12:55:16.907+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Leyendo'/><category scheme='http://www.blogger.com/atom/ns#' term='Tecnologías ASP.NET 4.0 (saltando desde la versión 2.0)'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>ASP.NET con herramientas gratuitas, legales y útiles.</title><content type='html'>Leo en&amp;nbsp;&lt;a href="http://shop.campusmvp.com/Product-Tecnolog%C3%ADas-ASP.NET-4.0---Saltando-desde-la-versi%C3%B3n-2.0_83.aspx"&gt;Tecnologías ASP.NET 4.0 (saltando desde la versión 2.0)&lt;/a&gt; de &lt;a href="http://www.jasoft.org/"&gt;José Manuel Alarcón Aguín&lt;/a&gt; que hay programadores y empresas que optan por &lt;strong&gt;PHP&lt;/strong&gt; o &lt;strong&gt;Java&lt;/strong&gt; por la gratuidad de las licencias y que esto es un error. Yo estaba en el mismo error.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Me ha alegrado saber que &lt;strong&gt;Visual Studio&lt;/strong&gt; dispone de versiones gratuitas y de libre descarga. Son las &lt;strong&gt;Express Edition&lt;/strong&gt;. Tanto para el desarrollo Web, &lt;strong&gt;Visual Studio Web Developer&lt;/strong&gt;, como para gestionar las bases de datos, &lt;strong&gt;SQL Server Express&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Sus limitaciones son que sólo le está permitido ocupar 1 GB de RAM para caché de datos, utilizar un único procesador de la máquina (con los núcleos que tenga éste, da igual) y el tamaño máximo de las bases de datos que puede manejar la licencia es de 4GB". &lt;/blockquote&gt;Suficiente para la mayoría de aplicaciones con destino a una PYME.&lt;br /&gt;&lt;br /&gt;Para descargar estas versiones Express &lt;a href="http://www.microsoft.com/express"&gt;http://www.microsoft.com/express&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-1883491130228396012?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/1883491130228396012/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/02/aspnet-con-herramientas-gratuitas.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/1883491130228396012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/1883491130228396012'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/02/aspnet-con-herramientas-gratuitas.html' title='ASP.NET con herramientas gratuitas, legales y útiles.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-3759376697728704529</id><published>2011-02-07T12:41:00.001+01:00</published><updated>2011-02-07T12:42:28.323+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='José Manuel Alarcón Aguín'/><category scheme='http://www.blogger.com/atom/ns#' term='Tecnologías ASP.NET 4.0 (saltando desde la versión 2.0)'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Notas de lectura'/><title type='text'>Notas de lectura desde ASP.NET 2.0 a ASP.NET 4.0.</title><content type='html'>Me estoy actualizando en cuanto a Framework, el nuevo proyecto vamos a hacerlo en el 4.0. La verdad que entre estar en 2 tipos de proyectos (SAP y ASP.NET) y el día a día a veces uno no lee ni se pone al día, y sigue con la inercia como si no hubiese novedades que nos faciliten el trabajo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para ello voy siguiendo la lectura del libro &lt;a href="http://shop.campusmvp.com/Product-Tecnolog%C3%ADas-ASP.NET-4.0---Saltando-desde-la-versi%C3%B3n-2.0_83.aspx"&gt;Tecnologías ASP.NET 4.0 (saltando desde la versión 2.0)&lt;/a&gt; de &lt;a href="http://www.jasoft.org/"&gt;José Manuel Alarcón Aguín&lt;/a&gt;. Y como este blog además de para compartir es para anotar cosas que me puedan ser útiles ahora y en el futuro, iré exponiendo algunas notas y comentarios sobre el libro, un poco a vuela pluma por eso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-3759376697728704529?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/3759376697728704529/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/02/notas-de-lectura-desde-aspnet-20-aspnet.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/3759376697728704529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/3759376697728704529'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/02/notas-de-lectura-desde-aspnet-20-aspnet.html' title='Notas de lectura desde ASP.NET 2.0 a ASP.NET 4.0.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-1327666020116253884</id><published>2011-02-02T12:01:00.000+01:00</published><updated>2011-02-02T12:01:41.972+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ficheros'/><category scheme='http://www.blogger.com/atom/ns#' term='fundación tripartita'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>XML tripartita de 2010 a 2011.</title><content type='html'>Ya hace algunos días que &lt;a href="http://www.excelium.net/"&gt;en Excelium hemos&lt;/a&gt; adaptado a uno de nuestros clientes los &lt;a href="http://empresas.fundaciontripartita.org/app/xml_formato2011.aspx"&gt;XML para comunicar a la tripartita los cursos&lt;/a&gt; que gestiona. Como en los comentarios previos a los enlaces con los esquemas no eran muy explícitos con los cambios, dejo aquí mis notas al respecto. Sí que es verdad que dentro de los XSD hay comentarios que se agradecen. &lt;br /&gt;&lt;h1&gt;&lt;span style="font-size: large;"&gt;Inicio Grupos tanto &lt;/span&gt;&lt;a href="http://empresas.fundaciontripartita.org/schemas/2011/InicioGrupos_Bonificada.xsd"&gt;&lt;span style="color: blue; font-size: large; text-decoration: underline;"&gt;Bonificadas&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: large;"&gt; como &lt;/span&gt;&lt;a href="http://empresas.fundaciontripartita.org/schemas/2011/InicioGrupos_Organizadora.xsd"&gt;&lt;span style="color: blue; font-size: large; text-decoration: underline;"&gt;Organizadoras&lt;/span&gt;&lt;/a&gt;.&lt;/h1&gt;&lt;h2&gt;Modalidad1 (Presencial).&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Centro, ahora es de un nuevo tipo t_centro_presencial que sólo tiene cif y nombre del centro. &lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Modalidad2 (Tutoría Presencial).&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Centro, ahora es de un nuevo tipo t_centro_presencial que sólo tiene cif y nombre del centro. &lt;/li&gt;&lt;li&gt;Tutor, se ha redefinido el tipo y ahora es obligatorio el nombre y el apellido.&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Modalidad3 (Distancia Teleformación).&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Centro, se elimina para ponerlo dentro de los tipos asistencia y teleformación. Los datos se sigue necesitando pero en otro sitio.&lt;/li&gt;&lt;li&gt;AsistenciaTeleformación, se añade el Centro y sólo se deja el teléfono.&lt;/li&gt;&lt;li&gt;AsistenciaDistancia, se añade el Centro y sólo se deja el teléfono.&lt;/li&gt;&lt;li&gt;Tutor, se ha redefinido el tipo y ahora es obligatorio el nombre y el apellido.&lt;/li&gt;&lt;/ol&gt;&lt;h1&gt;&lt;span style="font-size: large;"&gt;Finalización Grupos tanto &lt;/span&gt;&lt;a href="http://empresas.fundaciontripartita.org/schemas/2011/FinalizacionGrupo_Bonificada.xsd"&gt;&lt;span style="color: blue; font-size: large; text-decoration: underline;"&gt;Bonificadas&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: large;"&gt; como &lt;/span&gt;&lt;a href="http://empresas.fundaciontripartita.org/schemas/2011/FinalizacionGrupo_Organizadora.xsd"&gt;&lt;span style="color: blue; font-size: large; text-decoration: underline;"&gt;Organizadoras&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: large;"&gt;.&lt;/span&gt;&lt;/h1&gt;&lt;h2&gt;Tipo Participante (t_participante).&lt;/h2&gt;Tiene nuevo campo aunque, tipo de documento, que será &lt;strong&gt;opcional en el ejercicio 2010&lt;/strong&gt;. En sucesivos ejercicios será obligatorio. Los posibles valores son 10 - NIF y 60 - NIE&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-1327666020116253884?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/1327666020116253884/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/02/xml-tripartita-de-2010-2011.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/1327666020116253884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/1327666020116253884'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2011/02/xml-tripartita-de-2010-2011.html' title='XML tripartita de 2010 a 2011.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-1610982600057735206</id><published>2010-10-31T12:14:00.001+01:00</published><updated>2010-10-31T12:15:27.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='regalos'/><title type='text'>Un regalo para amig@s, novi@s o espos@s linuxer@s y viajer@s.</title><content type='html'>Este blog es de .Net, pero no pude evitar hacer una foto a estas maletas con forma de pingüinos y pensar en el marido de una amiga que le va mucho el pingüino y de tanto en tanto tiene que viajar. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-iiuoEHSndU/TM1NSN9PphI/AAAAAAAAAFw/A-GpIjwaOM4/s1600/pinguinos.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" nx="true" src="http://4.bp.blogspot.com/_-iiuoEHSndU/TM1NSN9PphI/AAAAAAAAAFw/A-GpIjwaOM4/s320/pinguinos.JPG" width="267" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;No entré a mirar el precio, pero los tamaños parecían variados, la tienda Banana Natura:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-iiuoEHSndU/TM1N59ixyxI/AAAAAAAAAF0/z6BsMI-pswY/s1600/direccion.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" nx="true" src="http://3.bp.blogspot.com/_-iiuoEHSndU/TM1N59ixyxI/AAAAAAAAAF0/z6BsMI-pswY/s320/direccion.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;En Barcelona &lt;a href="http://maps.google.es/maps?f=q&amp;amp;source=s_q&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=Carrer+del+Rossell%C3%B3,+226,+Barcelona&amp;amp;sll=41.395097,2.159736&amp;amp;sspn=0.008065,0.019248&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Carrer+del+Rossell%C3%B3,+226,+08008+Barcelona,+Catalu%C3%B1a&amp;amp;z=16"&gt;Carrer del Rosselló 226&lt;/a&gt;, metro Diagonal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-1610982600057735206?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/1610982600057735206/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/10/un-regalo-para-amigs-novis-o-esposs.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/1610982600057735206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/1610982600057735206'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/10/un-regalo-para-amigs-novis-o-esposs.html' title='Un regalo para amig@s, novi@s o espos@s linuxer@s y viajer@s.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-iiuoEHSndU/TM1NSN9PphI/AAAAAAAAAFw/A-GpIjwaOM4/s72-c/pinguinos.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-8097914560723765311</id><published>2010-04-14T18:30:00.002+02:00</published><updated>2010-04-14T18:32:02.417+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='deserializar'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='2005'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='serializable'/><title type='text'>Desde el XML a nuestra clase con C#</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;El otro día me anoté en este blog para acordarme como generar la definición de clase (en C#) desde un esquema xsd con xsd.exe y poder generar luego el XML. ¿Pero qué hacer si nos dan el XML? La &lt;a href="http://msdn.microsoft.com/es-es/library/fa420a9y(VS.80).aspx"&gt;respuesta aquí&lt;/a&gt;. Así cerramos el círculo.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-8097914560723765311?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/8097914560723765311/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/04/desde-el-xml-nuestra-clase-con-c.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/8097914560723765311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/8097914560723765311'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/04/desde-el-xml-nuestra-clase-con-c.html' title='Desde el XML a nuestra clase con C#'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-4985835687441024399</id><published>2010-04-01T12:57:00.004+02:00</published><updated>2010-04-01T12:59:05.085+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='2005'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Como crear una clase a partir de un fichero XML o XSD y luego el XML con C#.</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;&lt;a href="http://www.programandoen.net/blog/docs/?year=2009&amp;amp;month=4&amp;amp;day=10&amp;amp;title=Crear-una-clase-a-partir-de-un-fichero-XML-o-XSD"&gt;&lt;span style="font-family:Georgia;"&gt;Aquí está muy bien explicado &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Georgia;"&gt;como conseguir pasar desde un esquema (xsd) a tener la clase que corresponde al esquema. Una vez llenemos nuestra clase pondremos pasar a tener el xml serializando con un método como este:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; Serializar(&lt;span style="color:blue;"&gt;object&lt;/span&gt; pObjeto, &lt;span style="color:blue;"&gt;string&lt;/span&gt; pPathXml)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{ &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;try &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// Generamos el xml. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;FileStream&lt;/span&gt; fs = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;System.Xml.Serialization.&lt;span style="color:#2b91af;"&gt;XmlSerializer&lt;/span&gt; serializer = &lt;span style="color:blue;"&gt;new&lt;/span&gt; System.Xml.Serialization.&lt;span style="color:#2b91af;"&gt;XmlSerializer&lt;/span&gt;(pObjeto.GetType());&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;fs = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;FileStream&lt;/span&gt;(pPathXml, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Create, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Write);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;serializer.Serialize(fs, pObjeto);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;} &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;catch&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{ &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;throw&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;finally &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{ &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (fs != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;fs.Close();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; wExc) { &lt;span style="color:blue;"&gt;throw&lt;/span&gt; wExc; }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;"&gt;Donde pObjeto es del tipo de Clase generada previamente, y pPathXml la ruta completa donde guardaremos el XML.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-4985835687441024399?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/4985835687441024399/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/04/como-crear-una-clase-partir-de-un.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/4985835687441024399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/4985835687441024399'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/04/como-crear-una-clase-partir-de-un.html' title='Como crear una clase a partir de un fichero XML o XSD y luego el XML con C#.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-893375385336492941</id><published>2010-02-10T18:20:00.004+01:00</published><updated>2010-02-26T14:58:47.161+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='files'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='exception'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='serializable'/><title type='text'>Gestión y serialización de errores</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;En nuestras páginas necesitamos gestionar los errores no contralados. Una buena práctica es guardar un log de errores en XML. Si intentamos serializar la excepción (&lt;span style="font-family:Courier New;font-size:10;color:#2b91af;"&gt;Exception&lt;/span&gt;) nos dar un error. Hay varias alternativas en internet pero yo estoy probando con algo sencillo y entendible.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Me he creado una clase Errores y dentro de ella un método que tendremos que poner en cada try catch.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;El método:&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Errores&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;const string cSaltoASP = "\r\n";&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; Errores()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;color:green;"&gt;//&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// TODO: Agregar aquí la lógica del constructor&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;//&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; Gestionar(&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; pErr)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; wCarpetaLog = &lt;span style="color:#2b91af;"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color:#a31515;"&gt;"CarpetaLog"&lt;/span&gt;].ToString() + &lt;span style="color:#a31515;"&gt;@"\Excepciones\"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; wDocPath = wCarpetaLog + &lt;span style="color:#a31515;"&gt;"fileErrores.xml"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; PathXml = wDocPath; &lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; dt = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"Excepcion"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"NowTime"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"Data"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"HelpLink"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"InnerException"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"Message"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"Source"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"StackTrace"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;"TargetSite"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;DataRow&lt;/span&gt; dr = dt.NewRow();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"NowTime"&lt;/span&gt;] = Excelium.&lt;span style="color:#2b91af;"&gt;Generales&lt;/span&gt;.AAAAMMDD(&lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Today) + &lt;span style="color:#a31515;"&gt;" "&lt;/span&gt; + &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now.ToShortTimeString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.Data != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"Data"&lt;/span&gt;] = pErr.Data.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.HelpLink != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"HelpLink"&lt;/span&gt;] = pErr.HelpLink.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.InnerException != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"InnerException"&lt;/span&gt;] = pErr.InnerException.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.Message != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"Message"&lt;/span&gt;] = pErr.Message.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.Source != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"Source"&lt;/span&gt;] = pErr.Source.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.StackTrace != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"StackTrace"&lt;/span&gt;] = pErr.StackTrace.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (pErr.TargetSite != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dr[&lt;span style="color:#a31515;"&gt;"TargetSite"&lt;/span&gt;] = pErr.TargetSite.ToString();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;dt.Rows.Add(dr);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;DataSet&lt;/span&gt; ds = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;DataSet&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"Excepciones"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;ds.Tables.Add(dt);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;FileStream&lt;/span&gt; fs = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;fs = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;FileStream&lt;/span&gt;(PathXml, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Append, &lt;span style="color:#2b91af;"&gt;FileAccess&lt;/span&gt;.Write);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;ds.WriteXml(fs);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;fs.Close();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; sAll = &lt;span style="color:blue;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (System.IO.&lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt; sr = &lt;span style="color:blue;"&gt;new&lt;/span&gt; System.IO.&lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt;(PathXml, System.Text.&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt;.Default))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;sAll = sr.ReadToEnd();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:green;"&gt;&lt;br /&gt; &lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;p&gt;&lt;br /&gt;sAll = sAll.Replace(cSaltoASP,"");&lt;/p&gt;&lt;p&gt;sAll = sAll.Replace(&lt;span style="color:#a31515;"&gt;"&amp;lt;/Excepciones&amp;gt;&amp;lt;Excepciones&amp;gt;"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;""&lt;/span&gt;);&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;//&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (System.IO.&lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt; sw = &lt;span style="color:blue;"&gt;new&lt;/span&gt; System.IO.&lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt;(PathXml, &lt;span style="color:blue;"&gt;false&lt;/span&gt;, System.Text.&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt;.Default))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;sw.WriteLine(sAll);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;sw.Flush();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Su Uso.&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;//Nuestro código;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Errores&lt;/span&gt;.Gestionar(e);&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;Aviso.&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Estoy probando todavía y queda mejorarlo.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-893375385336492941?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/893375385336492941/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/02/gestion-y-serializacion-de-errores.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/893375385336492941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/893375385336492941'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2010/02/gestion-y-serializacion-de-errores.html' title='Gestión y serialización de errores'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-241401029409207938</id><published>2009-08-31T20:37:00.004+02:00</published><updated>2009-09-01T16:00:46.468+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regla'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Medir pixels en la pantalla.</title><content type='html'>&lt;a href="http://www.mioplanet.com/products/pixelruler/preview.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 548px; CURSOR: hand; HEIGHT: 51px" alt="" src="http://www.mioplanet.com/products/pixelruler/preview.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;¿Quién no ha necesitado alguna vez medir una tabla o otro elemento en una de nuestras pantallas? Ya sea para un programa de escritorio como para una hoja con contenido html. Pues aquí tenemos una &lt;a href="http://www.mioplanet.com/products/pixelruler/"&gt;regla de pixels&lt;/a&gt;. Y gratis.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-241401029409207938?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/241401029409207938/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2009/08/medir-pixel-en-la-pantalla.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/241401029409207938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/241401029409207938'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2009/08/medir-pixel-en-la-pantalla.html' title='Medir pixels en la pantalla.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-8017538733435449107</id><published>2009-05-12T18:33:00.003+02:00</published><updated>2009-11-27T10:20:47.226+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='month names'/><category scheme='http://www.blogger.com/atom/ns#' term='DateTime'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='DateTimeFormatInfo'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='nombre meses'/><title type='text'>Nombre de los meses en castellano o  cualquier otro idioma en asp.net.</title><content type='html'>&lt;p&gt;¿Quién no ha necesitado poner los nombres de los meses en español? Es sencillo con &lt;span style="color:#99ffff;"&gt;DateTimeFormatInfo&lt;/span&gt; del namespace (System.Globalization).&lt;br /&gt;La instrucción seria:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;DateTimeFormatInfo myDTFI = new CultureInfo("es-ES", false).DateTimeFormat;&lt;br /&gt;string wLiteralMesActual = myDTFI.MonthNames[DateTime.Today.Month - 1];&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Cambiando el CultureInfo, podemos hacerlo en otros idiomas.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-8017538733435449107?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/8017538733435449107/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2009/05/nombre-de-los-meses-en-castellano-o.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/8017538733435449107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/8017538733435449107'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2009/05/nombre-de-los-meses-en-castellano-o.html' title='Nombre de los meses en castellano o  cualquier otro idioma en asp.net.'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4677157865402141001.post-3429589426112438796</id><published>2009-04-17T10:09:00.006+02:00</published><updated>2009-04-20T11:39:23.382+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='files'/><category scheme='http://www.blogger.com/atom/ns#' term='richt text format'/><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='concatenar'/><category scheme='http://www.blogger.com/atom/ns#' term='ficheros'/><category scheme='http://www.blogger.com/atom/ns#' term='RTF'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Como unir 2 documentos RTF (ASP.NET C#).</title><content type='html'>&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Por necesidades del proyecto actual hemos tenido que trabajar con &lt;strong&gt;RFT&lt;/strong&gt;, ya que no podíamos usar las dll de Word. En algunos foros recomiendan no utilizarlas y además en el servidor donde colocaremos la aplicación no podíamos instalar el office.&lt;br /&gt;&lt;br /&gt;Generábamos varios documentos, que queríamos unir en uno sólo según la plantilla que usábamos. No hemos acabábamos de encontrar una satisfactoria a la complejidad de nuestros RTF’s.&lt;br /&gt;&lt;br /&gt;Por ejemplo, usar el &lt;a href="http://www.developersdex.com/csharp/message.asp?p=1111&amp;amp;r=6265989"&gt;RichTextBox de (de Windows.Forms) como sugerían en algunos foros&lt;/a&gt;&lt;/span&gt;,&lt;span style="font-family:verdana;font-size:85%;"&gt; funciona bastante bien, incluso si trabajas con Web, aunque necesitas añadir la referencia. Pero en nuestro caso los ficheros son demasiado complejos y me imagino que si trabajamos con muchos documentos debe dar problemas de memoria.&lt;br /&gt;&lt;br /&gt;Finalmente mirando &lt;a href="http://www.codeproject.com/KB/string/RTFBuilder.aspx"&gt;una solución de codeproject&lt;/a&gt; &lt;/span&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;y con &lt;a href="http://stackoverflow.com/questions/628553/merge-rtf-files"&gt;alguna sútil y leve pista&lt;/a&gt; hemos llegado a una conclusión que nos funciona. &lt;/span&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;En el primer link hay toda una solución para tratar RTF’s, a mí no me ha acabado de funcionar porque la solución no es reconocida por mi versión de Visual Studio, y además me daba algunos errores de código. De todas formas me ha ayudado echarle un ojo, aunque me temo que sobretodo debe funcionar uniendo los RTF's generados por el mismo programa.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;Finalmente aquí el código:&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;using System;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Configuration;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Security;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Web.UI.WebControls.WebParts;&lt;br /&gt;using System.Web.UI.HtmlControls;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;br /&gt;public class RTFUtiles&lt;br /&gt;{&lt;br /&gt;const string cFuentes = "{\\fonttbl";&lt;br /&gt;const string cColores = "{\\colortbl";&lt;br /&gt;const string cHojaEstilos = "{\\stylesheet";&lt;br /&gt;const string cAlmacen = @"{\*\datastore";&lt;br /&gt;const string cEstilosLatentes = @"{\*\latentstyles";&lt;br /&gt;public RTFUtiles()&lt;br /&gt;{&lt;br /&gt;//&lt;br /&gt;//&lt;br /&gt;}&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Une dos documentos RTF.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="pRtfPrincipalPath"&gt;Ruta del fichero al que vamos a a¤adir.&lt;/param&gt;&lt;br /&gt;/// &lt;param name="pRtfAnyadirPath"&gt;Ruta del fichero que queremos a¤adir.&lt;/param&gt;&lt;br /&gt;public static void Merge(string pRtfPrincipalPath, string pRtfAnyadirPath)&lt;br /&gt;{&lt;br /&gt;if (System.IO.File.Exists(pRtfPrincipalPath))&lt;br /&gt;{&lt;br /&gt;string pPathProvisional = pRtfPrincipalPath.Replace(".rtf", "PROV.rtf");&lt;br /&gt;System.IO.StreamWriter sw = new System.IO.StreamWriter(pPathProvisional, true, System.Text.Encoding.Default);&lt;br /&gt;using (System.IO.StreamReader sr = new System.IO.StreamReader(pRtfPrincipalPath, System.Text.Encoding.Default))&lt;br /&gt;{&lt;br /&gt;// Escribimos el mensaje principal. Sin el final "}}".&lt;br /&gt;string line;&lt;br /&gt;while ((line = sr.ReadLine()) != null)&lt;br /&gt;{&lt;br /&gt;string miLinea = line;&lt;br /&gt;if (sr.EndOfStream)&lt;br /&gt;{&lt;br /&gt;// Quitamos el final "}}".&lt;br /&gt;miLinea = miLinea.TrimEnd().Substring(0, (miLinea.Length - 1));&lt;br /&gt;}&lt;br /&gt;sw.WriteLine(miLinea);&lt;br /&gt;sw.Flush();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;// Nueva p gina&lt;br /&gt;sw.WriteLine("\\page");&lt;br /&gt;sw.Flush();&lt;br /&gt;// A¤adimos el contenido del segundo sin incio, definici¢n de colores y fuentes.&lt;br /&gt;System.IO.StreamReader sr2 = new System.IO.StreamReader(pRtfAnyadirPath, System.Text.Encoding.Default);&lt;br /&gt;string texto2 = sr2.ReadToEnd();&lt;br /&gt;sr2.Close();&lt;br /&gt;sw.WriteLine(Contenido(texto2.Trim()));&lt;br /&gt;sw.Flush();&lt;br /&gt;// A¤adimos el final de documento que hemos quitado al primero.&lt;br /&gt;sw.WriteLine("}");&lt;br /&gt;sw.Flush();&lt;br /&gt;sw.Close();&lt;br /&gt;// Reemplazamos el fichero para que sea el mismo que el original.&lt;br /&gt;System.IO.File.Copy(pPathProvisional, pRtfPrincipalPath, true);&lt;br /&gt;System.IO.File.Delete(pPathProvisional);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;System.IO.File.Copy(pRtfAnyadirPath, pRtfPrincipalPath);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;private static string Contenido(string pRtf)&lt;br /&gt;{&lt;br /&gt;string wRt = pRtf;&lt;br /&gt;wRt = wRt.Replace(Inicio(wRt), "");&lt;br /&gt;wRt = wRt.Replace(Colores(wRt), "");&lt;br /&gt;wRt = wRt.Replace(Fuentes(wRt), "");&lt;br /&gt;wRt = wRt.Replace(HojaEstilos(wRt), "");&lt;br /&gt;wRt = wRt.Replace(Almacen(wRt), "");&lt;br /&gt;wRt = wRt.Replace(EstilosLatentes(wRt), "");&lt;br /&gt;wRt = wRt.Substring(0, (wRt.Length - 1));&lt;br /&gt;return wRt;&lt;br /&gt;}&lt;br /&gt;private static string Fuentes(string pRtf)&lt;br /&gt;{&lt;br /&gt;return BuscarTag(pRtf, cFuentes);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private static string Colores(string pRtf)&lt;br /&gt;{&lt;br /&gt;return BuscarTag(pRtf, cColores);&lt;br /&gt;}&lt;br /&gt;private static string HojaEstilos(string pRtf)&lt;br /&gt;{&lt;br /&gt;return BuscarTag(pRtf, cHojaEstilos);&lt;br /&gt;}&lt;br /&gt;private static string Almacen(string pRtf)&lt;br /&gt;{&lt;br /&gt;return BuscarTag(pRtf, cAlmacen);&lt;br /&gt;}&lt;br /&gt;private static string EstilosLatentes(string pRtf)&lt;br /&gt;{&lt;br /&gt;return BuscarTag(pRtf, cEstilosLatentes);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private static string Inicio(string pRtf)&lt;br /&gt;{&lt;br /&gt;string wRt = string.Empty;&lt;br /&gt;int intFuente = 0;&lt;br /&gt;char[] rtfCh = pRtf.ToCharArray();&lt;br /&gt;int pos = 0;&lt;br /&gt;for (int i = intFuente; i &lt; pRtf.Length; i++)&lt;br /&gt;{&lt;br /&gt;if (rtfCh[i] == char.Parse("{"))&lt;br /&gt;{&lt;br /&gt;pos++;&lt;br /&gt;}&lt;br /&gt;if (rtfCh[i] == char.Parse("}"))&lt;br /&gt;{&lt;br /&gt;pos--;&lt;br /&gt;}&lt;br /&gt;if (pos == 2)&lt;br /&gt;{&lt;br /&gt;return wRt;&lt;br /&gt;}&lt;br /&gt;wRt += rtfCh[i].ToString();&lt;br /&gt;}&lt;br /&gt;return wRt;&lt;br /&gt;}&lt;br /&gt;private static string BuscarTag(string pRtf, string pTag)&lt;br /&gt;{&lt;br /&gt;string wRt = string.Empty;&lt;br /&gt;int intFuente = pRtf.IndexOf(pTag);&lt;br /&gt;char[] rtfCh = pRtf.ToCharArray();&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;if (intFuente &lt; 0) { intFuente = 0; }&lt;br /&gt;int pos = 0;&lt;br /&gt;for (int i = intFuente; i &lt; rtfCh.Length; i++)&lt;br /&gt;{&lt;br /&gt;wRt += rtfCh[i].ToString();&lt;br /&gt;if (rtfCh[i] == char.Parse("{"))&lt;br /&gt;{&lt;br /&gt;pos++;&lt;br /&gt;}&lt;br /&gt;if (rtfCh[i] == char.Parse("}"))&lt;br /&gt;{&lt;br /&gt;pos--;&lt;br /&gt;}&lt;br /&gt;if (pos == 0)&lt;br /&gt;{&lt;br /&gt;return wRt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch (Exception pErr)&lt;br /&gt;{&lt;br /&gt;throw pErr;&lt;br /&gt;}&lt;br /&gt;return wRt;&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4677157865402141001-3429589426112438796?l=miscosasdepuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscosasdepuntonet.blogspot.com/feeds/3429589426112438796/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2009/04/como-unir-2-documentos-rtf-aspnet-c.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/3429589426112438796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4677157865402141001/posts/default/3429589426112438796'/><link rel='alternate' type='text/html' href='http://miscosasdepuntonet.blogspot.com/2009/04/como-unir-2-documentos-rtf-aspnet-c.html' title='Como unir 2 documentos RTF (ASP.NET C#).'/><author><name>SRG</name><uri>http://www.blogger.com/profile/12611003096173056532</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/-g651JeD4w5w/TyfBdMLLi7I/AAAAAAAAAHc/2n2zooJxkYQ/s220/yes-we-can.gif'/></author><thr:total>2</thr:total></entry></feed>
