2013-07-24 3 views
4

데이터 저장에 관한 제 질문에 따라 XML을 사용할 수 있지만 Base64를 사용하여 인코딩하여 파일을 난독화할 것을 제안했습니다. 이 아이디어가 마음에 들지만 XML로 원하는 것을 얻을 수 있지만 Base64로 저장하는 방법을 모르겠습니다.XML을 Base64 인코딩으로 작성하십시오.

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 

XmlWriter write = XmlWriter.Create("C:\\Users\\Andy\\Desktop\\database.xml", settings); 
write.WriteStartDocument(); 
write.WriteStartElement("Database"); 
write.WriteStartElement("Entry"); 
write.WriteAttributeString("key", "value"); 
write.WriteEndElement(); 
write.WriteEndElement(); 

write.Flush(); 
write.Close(); 

답변

3

쓰기를 :

var sb = new StringBuilder(); 
var settings = new XmlWriterSettings(); 
//..settings 
using (var writer = XmlWriter.Create(sb, settings)) 
{ 
    //... 
} 
//http://stackoverflow.com/questions/1564718/using-stringwriter-for-xml-serialization 
var encoding = new UnicodeEncoding(); 
string s = Convert.ToBase64String(encoding.GetBytes(sb.ToString())); 

File.WriteAllText("c:\temp.txt", s); 

은 읽기 :

string readText = File.ReadAllText("c:\temp.txt"); 
byte[] toDecodeByte = Convert.FromBase64String(readText); 

using (var stream = new MemoryStream(toDecodeByte)) 
{ 
    using (XmlReader reader = XmlReader.Create(stream)) 
    { 
     //.. read your xml 
    } 
} 
+0

답변 해 주셔서 감사합니다. 그래도 전체 XML 파일을 인코딩하고 싶습니다. 그러니 그 부분을 확장하십시오. – Andy

+0

@Andy ops, 완료! – giammin

+0

+1 수정 해 주셔서 감사합니다. 그러면 필자는 파일에's'라고 쓰는 writer 객체를 사용하겠습니까? 또한 원래 묻지는 않았지만 XML 파일을 읽는 방법을 보여줄 수 있습니까? – Andy

1

이것은 당신이 찾고있는 정보가있을 것이다 : 이것은 지금까지 내 코드입니다

http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writebase64.aspx

HTH를

D3

+0

감사를 읽을 수 있지만 난 그냥 값보다는 전체 XML 파일을 인코딩 할. – Andy

+0

이것은 특정 바이너리 데이터를 쓰는 경우에만 유용합니다. 그러면 전체 XML 파일을 Base64로 인코딩하지 않습니다. –

2

당신은 다음 Base64로로 문자열을 변환이

using (var sw = new StringWriter()) { 
using (var xw = XmlWriter.Create(sw)) { 
// Build Xml with xw. 


    } 
    return sw.ToString(); 
} 

같은 문자열로 XmlWriter를 변환해야합니다. 그리고 base64로 데이터를 인코딩 및 파일에 쓰기에 그것이 MemoryStream

저장을 MemoryStream을을 사용하여 XML 데이터를 사용하는 예를 여기

+0

답변 해 주셔서 감사합니다. 그래서 Base64로 인코딩 된 데이터를위한 새로운 writer 객체를 만들어야합니까? – Andy

+2

+1. 반환 된 문자열을 base64로 변환하여 파일에 쓰는 방법을 보여주는 코드를 추가해야합니다. –

+0

@EhsanUllah 예, 제발 : – Andy

1

을 파일에 쓸.

using (var ms = new MemoryStream()) 
{ 
    // Memory Stream 
    using (XmlWriter writer = XmlWriter.Create(ms,settings)) 
    { 
     writer.WriteStartDocument(); 
     writer.WriteStartElement("Database"); 
     writer.WriteStartElement("Entry"); 
     writer.WriteAttributeString("key", "value"); 
     writer.WriteEndElement(); 
     writer.WriteEndElement(); 

     writer.Flush(); 
     writer.Close(); 

     // XML Data (Debug) 
     Console.WriteLine(new UTF8Encoding().GetString(ms.ToArray())); 

     // Pre encoding hex (Debug) 
     Console.WriteLine(BitConverter.ToString(ms.ToArray())); 

     string s = Convert.ToBase64String(ms.ToArray()); 
     Console.WriteLine(s); // (Debug) 

     // Post encoding 
     File.WriteAllText(@"C:\Temp\A.enc", s); 
    } 
} 

파일 당신의 답변을 다시

// Read encoded file back to xml 
string enc_text = File.ReadAllText(@"C:\Temp\A.enc"); 
Console.WriteLine(enc_text); // (Debug) 

// Pre encoding hex 
byte[] mem_bytes = Convert.FromBase64String(enc_text); 
Console.WriteLine(BitConverter.ToString(mem_bytes)); // (Debug) 

// XML Data 
Console.WriteLine(new UTF8Encoding().GetString(mem_bytes)); 

// Read byte array into Reader 
using (var stream = new MemoryStream(mem_bytes)) 
{ 
    using (XmlReader reader = XmlReader.Create(stream)) 
    { 
     // Use reader as desired 
    } 
} 
+0

답변 해 주셔서 대단히 감사합니다. 파일을 다시 읽는 것에 관해서는, 어떻게 실제로 XmlReader에서 데이터를 가져올 수 있습니까? 어떤'Stream' 객체가 사용하는 것이 가장 좋을까요? – Andy

+0

@Andy - 바이트 배열 데이터에서 XmlReader를 만드는 방법을 보여주기 위해 업데이트되었습니다. – SwDevMan81

+0

대단히 감사합니다. 나는 그것이 그렇게 될 것이라고 생각했지만 C#을 처음 접했습니다. – Andy

관련 문제