Datei versand. Wie versende ich eine Datei zu einem Programm

b00Gie

Grünschnabel
Hallöle,

ist zwar nen alter Thread, nur brauche ich genau das selbe wie der Threadersteller...

Habe erst vor kurzem angefangen C# zu lernen und schon einige kleine DOS Applikationen geschrieben, nur komm ich gerade nicht weiter....

und zwar, wollte ich das Programm von Alexander (dass er in diesem Thread geposted hat) so umschreiben, dass es 2 Dateien auf der Festplatte sucht, findet und an eine bestimmte IP sendet....

Nunja, daran haperts... ich habe es ja nichtmal geschafft 2 fixe Dateien zu senden... nach der Übertragung der ersten Datei, stürzt das Programm einfach ab :(

Und wie ich das mit dem Durchsuchen der Festplatte anstellen soll, weiss ich leider auch nicht...

Waere nett, wenn mir jemand helfen könnte...

Mein Versuch das Programm umzuschreiben:

Code:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Threading;
using System.Text;

namespace furred.Tutsde.FileTransfer
{
	/// <summary>
	/// Zusammenfassung für Class1.
	/// </summary>
	class startup
	{
		/// <summary>
		/// Der Haupteinstiegspunkt für die Anwendung.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			Console.Write("Pfad> ");
			string path = @"C:\test1.exe";
                        string path2 = @"C:\test2.exe";

			if(!File.Exists(path))
			{
				Console.WriteLine("404");
				return;
			}
            if (!File.Exists(path2))
            {
                Console.WriteLine("404");
                return;
            }

			TcpClient client = new TcpClient();
			client.Connect("192.168.168.169", 5990);
			NetworkStream stream = client.GetStream();

			sendMsg(stream, "FILE " + Path.GetFileName(path));
			string msg = readMsg(stream);
			string accept_msg = "OK " + Path.GetFileName(path);

                        sendMsg(stream, "FILE " + Path.GetFileName(path2));
                        string msg = readMsg(stream);
                        string accept_msg = "OK " + Path.GetFileName(path2);

			Console.WriteLine("GOT '{0}' - Hoping for '{1}'",
				msg, accept_msg);

			if (msg.Equals(accept_msg))
			{
				FileStream fstream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                		FileStream fstream = File.Open(path2, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
				long s_length = fstream.Length;
				long s_read = 0;

				using (BinaryReader reader = new BinaryReader(fstream))
				{
					while (s_length > s_read)
					{
						byte[] buffer = new byte[1024];
						int read = reader.Read(buffer, 0, 1024);
						s_read += read;

						sendBuffer(stream, buffer, read);

						int pc = (int) ((((double)s_read) / ((double)s_length)) * 100);

						if (pc % 5 == 0)
							Console.WriteLine("{0:000.0}% gesendet..", pc);
					}
				}
				stream.Flush();
				Console.WriteLine("Successfully Sent! - Press [enter] to exit..");

			}
			else
				Console.WriteLine("File not accepted by peer..");

			stream.Close();
			client.Close();

			Console.WriteLine("Press [enter] to exit..");
			Console.ReadLine();
		}

		private static string readMsg(NetworkStream stream)
		{
			Encoding enc = Encoding.UTF8;
			byte[] buffer = new byte[1024];
			int read = stream.Read(buffer, 0, 1024);

			string msg = enc.GetString(buffer, 0, read);
			return msg.Trim(new char[] { '\r', '\n' });
		}

		private static void sendMsg(NetworkStream stream, string msg)
		{
			Encoding enc = Encoding.UTF8;
			byte[] buffer = enc.GetBytes(msg + "\r\n");
			sendBuffer(stream, buffer, buffer.Length);
		}

		private static void sendBuffer(NetworkStream stream, byte[] buffer, int size)
		{
			stream.Write(buffer, 0, size);
		}
	}

}