Exportar contactos a vcard (.vcf) c#??

Iniciado por Hartigan, 29 Julio 2010, 17:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Hartigan

Hola, pues me gustaría poder exportar los datos de los contactos de mi agenda a fichero .vcf para que puedan se leidos por otras aplicaciones pero no se como hacerlo. He buscado info por google pero lo único que encuentro son cosas relacionadas con outlook pero nada echo en c#. Me podrias ayudar indicamndome los pasos que debo seguir??' que funciones uso para añadir la info???.

saludos y gracias compis

Novlucker

Los archivos vcard (vcf) tienen un formato standard, solamente debes de escribir un archivo de texto respetando dicho formato

:http://es.wikipedia.org/wiki/VCard

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Hartigan

Síp muchas gracias, ya lo he conseguido pero ahora tengo un problema, y es el tema de los acentos. Que códificación debo usar a la hora de crear el fichero ??? creo que por defecto esta UTF-8...

saludos y gracias.

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

[D4N93R]

Con respecto al manejo de archivos, ten cuidado de no dejarlos abiertos, utilizando try catch y en el finally cerrarlo.

Un saludo!

Hartigan

Cita de: D4N93R en 29 Julio 2010, 18:47 PM
Con respecto al manejo de archivos, ten cuidado de no dejarlos abiertos, utilizando try catch y en el finally cerrarlo.

Un saludo!

gracias tio, es lo que estaba haciendo. ;)

Hartigan

Siguiendo con el tema tengo algunos problemillas.

por partes:

1º el tema de la pareja entre otros, en las especificaciones dice que debo usar: "X-SPOUSE:" pero a mi no me funciona no me lee nada. mi linea de código es:

Código (csharp) [Seleccionar]
sw.Write("X-SPOUSE:" + datos[31] + System.Environment.NewLine);

2º. El tema de fechas, como el aniversario o cumpleaños. Yo en la base de datos las fechas las guardé como string pero veo que no es la mejor manera puesto que luego para leerlas eso no me lo lee, ya que el formato para el vcard sería:

X-ANNIVERSARY    property    YYYY-MM-DD    arbitrary anniversary, in addition to BDAY = birthday

Eso es lo que viene en las especificaciones. Entonces cual es la mejor forma de guardar las fechas en la bdd???

Y bueno de momento eso es todo. A ver si me podeis ayudar.

Un abrazo ;)

[D4N93R]

En vez de usar Write, usa WriteLine y quita System.Environment.NewLine.. :)

Para guardar las fechas en la base de datos puedes hacerlo en una columna tipo DateTime..

Hartigan

Nada, no hay manera de que me lea nada. ni fechas, ni el nombre de la pareja ni nada de nada.

lo único que he conseguido es que me lea bien los acentos, el resto no. A ver si me podeis echar un ojo. Este es mi código:

Código (csharp) [Seleccionar]

using (StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.Default))
                    {
                        sw.WriteLine("BEGIN: VCARD");
                        sw.WriteLine("VERSION: 3.0");
                        sw.WriteLine("N:" + name);
                        sw.WriteLine("FN:" + formatedName);
                        sw.WriteLine("ORG:" + datos[23]);
                        sw.WriteLine("TITLE:" + datos[0]);                       
                        sw.WriteLine("NOTE:" + datos[34]);
                        sw.WriteLine("TEL;WORK;VOICE:" + datos[27]);
                        sw.WriteLine("TEL;HOME;VOICE:" + datos[11]);
                        sw.WriteLine("TEL;CELL;VOICE:" + datos[12]);
                        sw.WriteLine("TEL;WORK;FAX:" + datos[28]);
                        sw.WriteLine("TEL;HOME;FAX:" + datos[13]);
                        sw.WriteLine("ADR;WORK:;;" + datos[18] + ";" + datos[19] + ";" + datos[20] + ";" + datos[22] + ";" + datos[21] + ";");
                        sw.WriteLine("LABEL;WORK:" + datos[18] + "\\" + datos[19] + "\\" + datos[20] + "\\" + datos[22] + "\\" + datos[21]);
                        sw.WriteLine("ADR;HOME:;;" + datos[6] + ";" + datos[7] + ";" + datos[8] + ";" + datos[9] + ";" + datos[10] + ";");
                        sw.WriteLine("LABEL;WORK:" + datos[6] + "\\" + datos[7] + "\\" + datos[8] + "\\" + datos[9] + "\\" + datos[10]);
                        sw.WriteLine("EMAIL;PREF;INTERNET:" + datos[14]);
                        sw.WriteLine("URL:" + datos[15]);
                        sw.WriteLine("X-ANNIVERSARY:" + fecha);
                        sw.WriteLine("item1.X-SPOUSE:" + datos[31]);
                       
                        sw.WriteLine("END: VCARD");
                    }


Pero no me lee nada. La fecha simplemente era una variable string Que ya tenía el formato de fecha y la he convertido a fecha pero nada.  Y lo de spouse (cónyuje) tampoco me lo lee.

Os dejo unos enlaces que estoy siguiendo por si os sirven:

http://www.w3.org/2002/12/cal/vcard-notes.html

http://en.wikipedia.org/wiki/VCard

Salu2

[D4N93R]

Cómo que lea? Si lo que haces es guardar, estás escribiendo.

El streamWriter es para escribir (guardar) usa el StreamReader para leer ..


Un saludo!