2014-02-07 69 views
1

解析電子名片(VCF)我設法用LumiSoft創建vCard,然後得到它從它的字符串值

LumiSoft.Net.Mime.vCard.vCard card = new vCard(); 
    Stream stream = new MemoryStream(); 
    card.ToStream(stream); 
    stream.Position = 0; 
    StreamReader reader = new StreamReader(stream); 
    return reader.ReadToEnd(); 

下面的字符串值的The返回的字符串的一個例子:

BEGIN:VCARD VERSION:3.0 UID:f1a6090d-ee73-4368-8fe6-26302fb3e97a N: LastName; FirstName ;;; TEL; CELL:0099912123456 EMAIL:[email protected] END:VCARD

這是multiplaforms標準字符串格式(移動和桌面),以共享聯繫人信息,我無法真正改變我發送的格式/接收vCard字符串的信息。 發送成功(在手機上,它成功解析這個字符串作爲一個vcf卡),問題是解析在桌面上接收的字符串(這是發送的字符串完全一樣)...

我試過正在將接收到的字符串寫入流然後解析它:

LumiSoft.Net.Mime.vCard.vCard card = new vCard(); 
    MemoryStream stream = new MemoryStream(); 
    StreamWriter writer = new StreamWriter(stream); 
    writer.Write(cardString); 
    writer.Flush(); 
    stream.Position = 0; 
    card.Parse(stream); 

哪個失敗。然後看看發生了什麼,我試着寫我到一個地方VCF文件,並打開它的字符串,

File.WriteAllText(@"C:\Users\user\Desktop\test.vcf", cardString); 

和失敗過,即使我交叉檢查的2串(發送和接收),他們是100%相同。 (可能會丟失標題?)

有關如何解析此字符串(如上所述)以檢索其信息(名稱,電子郵件,照片...)的幫助?我注意到一些SO帖子使用正則表達式來實現,但我希望能夠使用庫,而不必使用LumiSoft。提前致謝。

回答

1

我不知道LumiSoft,但你的字符串

BEGIN:VCARD VERSION:3.0 UID:f1a6090d-ee73-4368-8fe6-26302fb3e97a N: LastName;FirstName;;; TEL;CELL:0099912123456 EMAIL:[email protected] END:VCARD 

是不是一個有效的格式。

應該

BEGIN:VCARD 
VERSION:3.0 
UID:f1a6090d-ee73-4368-8fe6-26302fb3e97a 
N:LastName;FirstName;;; 
TEL;CELL:0099912123456 EMAIL:[email protected] 
END:VCARD 

注意,而不是單個空格的換行符。


也許給Thought.vCards一試。

+0

正確格式化字符串。另外還有一個隱藏的字符從我們的服務器發送到字符串的開頭,從而阻止瞭解析。我修剪完畢後,全部解決了。 Thought.vCards看起來不錯,謝謝你的建議 – Reyno

1

EWsoftware.PDI - 這是一個分析和創建vCard文件的好庫。 它作爲NuGet包提供。在Visual Studio的NuGet管理器中選擇vCard或EWSoftware。

這是對命名空間

EWsoftware.PDI

在EWSoftware.PDI.Parser還有一類VCardParser可以解析文件,並返回電子名片對象和EWSoftware集合的描述的鏈接。 PDI.Objects thre是類vCard,它也具有用於將vCard對象放入文件的WriteToStream方法。