クライアントがサーバーからファイルやフォルダを要求してドキュメントに保存する方法を作成しようとしています。私はすべてのサーバーのファイルのツリービューを持っている現時点では、クライアントは、右下のコードでファイルまたはフォルダをクリックして受け取ることができるように:TCP、ファイルとフォルダを転送しているにもかかわらず、フォルダのみがファイル名を保持しているようです
if (isConnected())
{
if (selectedFile.Nodes.Count > 0) //If its a folder
{
consoleLog("Receiving folder (" + selectedFile.Text + ")... please wait");
clientSendText("receiveFolder#" + selectedFile.FullPath.ToString() + "#", 1);
}
else //If its a file
{
consoleLog("Receiving file (" + selectedFile.Text + ")... please wait");
clientSendText("receiveFile#" + selectedFile.FullPath.ToString() + "#", 1);
}
}
だから、ファイルまたはフォルダのいずれかを受け取るためにコマンドを送信します
public static void receiveFolder(string path)
{
path = getFullFolderPath(path);
if (Directory.Exists(path))
{
ZipFile.CreateFromDirectory(path, path + ".zip", CompressionLevel.Fastest, true);
serverSendFile(path + ".zip", 8);
if (File.Exists(path + ".zip"))
{
File.Delete(path + ".zip");
}
}
else
{
serverSendText("Folder does not exist", 1);
}
}
public static void receiveFile(string path)
{
path = getFullFilePath(path);
if (File.Exists(path))
{
serverSendFile(path, 9);
}
else
{
serverSendText("File does not exist", 1);
}
}
そのファイルまたはフォルダだからイムフォルダを送信する方法は、ファイルとして送信し、zipファイルを削除、最初にそれをビュンされた場合は、サーバー側では、それはどちらかに応じて、次のいずれかのコマンドを実行しますフォルダー。
ので、フォルダが完璧に動作受け else if (dataType == 8)
{
this.Invoke(new MethodInvoker(delegate
{
string savePath = Properties.Settings.Default.textSavePath;
consoleLog("Reply from server: folder receiving...please wait");
File.WriteAllBytes(savePath + ".zip", data);
ZipFile.ExtractToDirectory(savePath + ".zip", savePath);
if (File.Exists(savePath + ".zip"))
{
File.Delete(savePath + ".zip");
}
consoleLog("Folder saved to " + savePath);
}));
}
else if (dataType == 9)
{
this.Invoke(new MethodInvoker(delegate
{
string savePath = Properties.Settings.Default.textSavePath;
consoleLog("Reply from server: file receiving...please wait");
File.WriteAllBytes(savePath, data);
consoleLog("File saved to " + savePath);
}));
}
、デフォルト:
だけので8ジッパーであり、9は任意のファイル [次のようにそれを受け取るクライアントである、第二のパラメータは、データ型であることに注意します保存場所はmydocumentsなので、同じ名前でそこに送信し、自分自身を解凍して普通のように見ることができます。ファイル名がないのは普通のファイルと同じですが、保存するパスの最後に "/picture.png"を手動で追加する必要があります。保存すると完璧な画像が保存されます損なわれていないが、私はなぜフォルダがその名前を保持しているのかわからないが、ファイルはdoesnt。ファイル名はデータとともに送信されていますか?私は右の私の目の前で何かをしないのです、何かアドバイスはまた、「あなたはzipファイルを受信したら、名前を付けて保存
public static void serverSendFile(string filePath, byte dataType)
{
if (tcpServer != null)
{
if (tcpClient.Connected == true)
{
byte[] data = File.ReadAllBytes(filePath);
data = data.Concat(new byte[] { (byte)dataType }).ToArray();
stream = tcpClient.GetStream();
int length = data.Length;
byte[] datalength = new byte[4];
datalength = BitConverter.GetBytes(length);
stream.Write(datalength, 0, 4);
stream.Write(data, 0, data.Length);
}
}
}
TCPはファイル転送プロトコルではありません。どのようにファイルを送受信していますか? – Luaan
ファイルのすべてのバイトを読み込んでバイト配列に入れ、データ型を連結してクライアントに送信します。コードを追加する必要があります –
ファイル名も同様に連結してください。ファイル名はファイルデータの一部ではなく、格納ディレクトリの値です。確かに、あなたは別のディレクトリに複数の名前を持つ1つのファイルを持つことができます:) – Luaan