2013-03-31 2 views
0

Я разрабатываю веб-приложение для карманного RFID-считывателя (windows CE), , и я пытаюсь отправить XML-файл с RFID-считывателя в беспроводную сеть для ноутбуков или GPRS. Код корректно работает с «окном формы приложения» на MS visual studio, но когда я пытаюсь использовать его с «приложением смарт-устройства», он не работает ... появляется ошибка для метода «ReadAllBytes»:Как отправить XML-файл с смарт-устройства на ПК в C#?

System.IO.File dose not contain a definition for ReadAllBytes

Пожалуйста, помогите мне справиться с этой ошибкой. Спасибо.


Код:

private void button1_Click(object sender, EventArgs e) 
{ 
try 
{ 

string IpAddressString = "10.1.1.104"; 

IPEndPoint ipEnd_client = new 
IPEndPoint(IPAddress.Parse(IpAddressString), 5656); 

Socket clientSock_client = new Socket(AddressFamily.InterNetwork, 
SocketType.Stream, ProtocolType.IP); 

string fileName = "student.XML"; 
string filePath [email protected]"My Device\"; 

fileName = fileName.Replace("\\", "/"); 
while (fileName.IndexOf("/") > -1) 
{ 

filePath += fileName.Substring(0, fileName.IndexOf("/") + 1); 

fileName = fileName.Substring(fileName.IndexOf("/") + 1); 
} 

byte[] fileNameByte = Encoding.UTF8.GetBytes(fileName); 
if (fileNameByte.Length > 5000 * 1024) 
{ 
curMsg_client = "File size is more than 5Mb, 
please try with small file."; 
MessageBox.Show("File size is more than 5Mb, 
please try with small file."); 
return; 
} 

MessageBox.Show("Buffering ..."); 

string fullPath = filePath + fileName; 
byte[] fileData =File.ReadAllBytes(fullPath); 

byte[] clientData = new byte[4 + fileNameByte.Length + 
fileData.Length]; 

//byte[] clientData = new byte[4 + fileNameByte.Length]; 

byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); 

fileNameLen.CopyTo(clientData, 0); 
fileNameByte.CopyTo(clientData, 4); 

fileData.CopyTo(clientData, 4 + fileNameByte.Length); 

MessageBox.Show("Connection to server ..."); 
clientSock_client.Connect(ipEnd_client); 

MessageBox.Show("File sending..."); 

clientSock_client.Send(clientData, 0, clientData.Length, 0); 

MessageBox.Show("Disconnecting..."); 
clientSock_client.Close(); 

MessageBox.Show ("File [" + fullPath + "] transferred."); 

} 
catch (Exception ex) 
{ 
if (ex.Message == "No connection could be made 
because the target machine actively refused it") 
{ 

MessageBox.Show ("File Sending fail. Because 
server not running."); 
} 
else 
{ 

MessageBox.Show ("File Sending fail." + 
ex.Message.ToString()); 
} 
} 
} 

ответ

3

Это потому, что, как сказано об ошибках, ReadAllBytes не существует в Compact Framework. Вы должны использовать перегрузку Read для получения данных.

Что-то вдоль этих линий:

using (var reader = File.OpenRead(filePath)) 
{ 
    var fileData = new byte[reader.Length]; 
    reader.Read(fileData, 0, fileData.Length); 
} 
+0

Когда я попытался осуществить это, и после того, как я запускаю это сообщение об ошибке говорит: 'не может найти часть path' .. Вы можете сказать мне, как встроить его в код? –

+0

Возможно, потому что у вас есть недопустимые пути. Почему вы заменяете обратную косую черту (\\) на косые черты (/)? Windows использует обратную косую черту (\\) для путей. – ctacke

+0

Windows CE также не поддерживает относительные пути, поэтому «MyDevice \ student.xml» недействителен. Вероятно, это должно быть "\ MyDevice \ student.xml" – ctacke