Невозможно вывести текст из консоли в текстовый файл - PullRequest
2 голосов
/ 20 декабря 2011

Я пытаюсь записать текст в текстовый файл:

        byte[] b = new byte[100];
        int k = s.Receive(b);
        Console.WriteLine("Recieved...");
        for (int i = 0; i < k; i++)
        {
            Console.Write(Convert.ToChar(b[i]));
            //TextWriter tw = new StreamWriter("output.txt");
            //tw.WriteLine(Convert.ToChar(b[i]));

        }

Хотя метод Console.Write работает отлично, и вывод текста отображается на экране, но когда я использую метод TextWriter, приложение выдает сотни ошибок (продолжается) и ничего не выводит в указанный файл вывода

Есть ли другой способ получить вывод "Console.Write (Convert.ToChar (b [i])));" в текстовый файл?

Ниже приведен пример ошибок:

Сервер работает на порту 8111 ... Локальная конечная точка : 172.16.0.37: 8111 Ожидание соединения ..... Соединение принято от 172.16.0.37:59307 Получено ... // Ошибка ..... при System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath)
в System.IO.FileStream.Init (Строковый путь, режим FileMode, FileAccess доступ, права Int32, логические права использования, общий доступ к FileShare, Int32 bufferSize, опции FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, логическое bFromProxy) в System.IO.FileStream..ctor (String путь, режим FileMode, доступ к FileAccess, общий доступ к FileShare, Int32 Параметры bufferSize, FileOptions) в System.IO.StreamWriter.CreateFile (String path, Boolean append) в System.IO.StreamWriter..ctor (Строковый путь, логическое добавление, кодировка кодирование, Int32 bufferSize) в System.IO.StreamWriter..ctor (String путь) в IntegServer.Main () в C: \ Users \ Limited \ Desktop \ IntegClient \ IntegServer \ IntegServer \ Program.cs: линия 38 Ошибка ..... в System.Net.Sockets.Socket.DoBind (EndPoint endPointSnapshot, SocketAddress socketAddress) в System.Net.Sockets.Socket.Bind (EndPoint localEP) в System.Net.Sockets.TcpListener.Start (отставание Int32) в System.Net.Sockets.TcpListener.Start () в IntegServer.Main () в C: \ Users \ Limited \ Desktop \ IntegClient \ IntegServer \ IntegServer \ Program.cs: линия 21 Ошибка ..... в System.Net.Sockets.Socket.DoBind (EndPoint endPointSnapshot, SocketAddress socketAddress) в System.Net.Sockets.Socket.Bind (EndPoint localEP) в System.Net.Sockets.TcpListener.Start (отставание Int32) в System.Net.Sockets.TcpListener.Start () в IntegServer.Main () в C: \ Users \ Limited \ Desktop \ IntegClient \ IntegServer \ IntegServer \ Program.cs: линия 21 Ошибка ..... в System.Net.Sockets.Socket.DoBind (EndPoint endPointSnapshot, SocketAddress socketAddress) в System.Net.Sockets.Socket.Bind (EndPoint localEP) в System.Net.Sockets.TcpListener.Start (отставание Int32) в System.Net.Sockets.TcpListener.Start ()

Полный код следующий:

  try
    {

        IPAddress ipAd = IPAddress.Parse("172.16.0.37"); //use local m/c IP address, and use the same in the client

        /* Initializes the Listener */
        TcpListener myList = new TcpListener(ipAd, 8111);

        /* Start Listeneting at the specified port */
        myList.Start();


            Console.WriteLine("The server is running at port 8111...");
            Console.WriteLine("The local End point is  :" + myList.LocalEndpoint);
            Console.WriteLine("Waiting for a connection.....");


        Socket s = myList.AcceptSocket();
        Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

        byte[] b = new byte[100];
        int k = s.Receive(b);
        Console.WriteLine("Recieved...");
        using (var txt = File.OpenWrite("output.txt"))
        {
            for (int i = 0; i < k; i++)
            {
                Console.Write(Convert.ToChar(b[i]));
                txt.WriteLine(Convert.ToChar(b[i]));
            }
        }




        ASCIIEncoding asen = new ASCIIEncoding();
        s.Send(asen.GetBytes("The string was recieved by the server."));
        Console.WriteLine("\nSent Acknowledgement to Client");
        /* clean up */
        s.Close();
        myList.Stop();


    }
    catch (Exception e)
    {
        Console.WriteLine("Error..... " + e.StackTrace);
    }
    // Loop the process
    loop();
}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

похоже, что ваша проблема в режиме доступа. Можете ли вы изменить свой код для создания потока файлов, проходящего в режиме доступа / записи или чтения / записи? Вот пример, если вам нужно следовать

FileStream fsFileStream = null;
fsFileStream = new FileStream("yourOutputFile", FileMode.Open, FileAccess.ReadWrite);
// then add your code here.. also is there a reason why you are declaring such a small byte to write try 512 or 1024 just a suggestion
0 голосов
/ 20 декабря 2011

Может быть, это то, что вы пытаетесь сделать?

byte[] b = new byte[100];
int k = s.Receive(b);
Console.WriteLine("Recieved...");
using (var sw = new StreamWriter("output.txt"))
{
    for (int i = 0; i < k; i++)
    {
        Console.Write(Convert.ToChar(b[i]));
        sw.Write(Convert.ToChar(b[i]));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...