Я делаю приложение для передачи файлов (сервер-клиент). Я использую TCP. (.net 4.0)
Как отправить папку со всем ее содержимым (папкой / файлами) на другую сторону ??
У меня есть эти методы, которые отлично работают:
Send(string srcPath, string destPath) //sends a single file
Recieve(string destPath) //recieves a single file
Это метод отправки:
public void Send(string srcPath, string destPath)
{
using (fs = new FileStream(srcPath, FileMode.Open, FileAccess.Read))
{
try
{
fileSize = fs.Length;
while (sum < fileSize)
{
if (fileSize - sum < packetSize)
{
count = fs.Read(data, 0, (int)(fileSize - sum));
network.Write(data, 0, (int)(fileSize - sum));
}
else
{
count = fs.Read(data, 0, data.Length);
network.Write(data, 0, data.Length);
}
fs.Seek(sum, SeekOrigin.Begin);
sum += count;
}
network.Flush();
}
finally
{
fs.Dispose();
}
}
}
и это метод получения:
public void Recieve(string destPath)
{
using (fs = new FileStream(destPath, FileMode.Create, FileAccess.Write))
{
try
{
while (sum < fileSize)
{
if (fileSize - sum < packetSize)
{
count = network.Read(data, 0, (int)(fileSize - sum));
fs.Write(data, 0, (int)(fileSize - sum));
}
else
{
count = network.Read(data, 0, data.Length);
fs.Write(data, 0, data.Length);
}
fs.Seek(sum, SeekOrigin.Begin);
sum += count;
}
}
finally
{
fs.Dispose();
}
}
}
Это общие переменные:
const int packetSize = 1024 * 8; //Packet Size.
long sum; //Sum of sent data.
long fileSize; //File Size.
int count = 0; //data counter.
static byte[] data = null; //data buffer.
NetworkStream network;
FileStream fs;
Я также получил:
bool IsFolder(string path) //that returns if the path is a folder or a file