Я пытаюсь записать массив Byte [], представляющий полный файл в файл.Этот файл может иметь расширение .csv или .db .
Я настроил синхронное клиентское и серверное приложение на основе MSDN Synchronous Sockets
После поиска через SO я обнаружил этот пост ( Можно ли записать массив Byte [] в файл на C #? ), который, кажется, указывает на то, что можно записать массив байтов в файл, используя:
File.WriteAllBytes(string path, byte[] bytes)
Моя проблема в том, что этот метод работает для файлов .csv, но не для файлов .db.
Почему это так?
Некоторый код ниже.
//Client-side
public static void StartClient()
{
byte[] bytes = new byte[9000];
try
{
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
Socket sender = new Socket(ipAddress.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP);
byte[] msg= File.ReadAllBytes("CsvOrDbPath");
int bytesSent = sender.Send(msg);
int bytesRec = sender.Receive(bytes);
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
catch (ArgumentNullException ane) {
Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
}
catch (SocketException se) {
Console.WriteLine("SocketException : {0}", se.ToString());
}
catch (Exception e) {
Console.WriteLine("Unexpected exception : {0}", e.ToString());
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
//Server-side
public static string data = null;
public static void StartListening()
{
byte[] bytes = new byte[9000];
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
Socket listener = new Socket(ipAddress.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Socket handler = listener.Accept();
data = null;
while (true)
{
int bytesRec = handler.Receive(bytes);
int expecting = 8; //expected number of bytes
string path = "CSVorDbPath";
// Need to encode back into .db file format somehow
// Works for csv
File.WriteAllBytes(path, bytes);
break;
}
//Echo the data back to the client.
//byte[] msg = Encoding.ASCII.GetBytes(data);
//handler.Send(msg);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Когда я использую файл .csv, эта процедура работает до определенной степени, и я получаю тот же файл на моем сервере.Когда я использую файл .db, процедура генерирует файл .db, но его нельзя открыть.
Я подозреваю, что проблема связана с тем, что я не кодирую данные .db в соответствующий формат - пожалуйста, кто-нибудь может объяснить, чтопроисходит?