Сохранение в файл в C #, visual studio 2010, ошибки - PullRequest
1 голос
/ 24 ноября 2010

g'day парни,

У меня небольшая ошибка с моей программой, когда при попытке сохранить в файл возникает ошибка, которая говорит: «Требуемая привилегия не удерживается клиентом». Я не уверен, как это исправить, поскольку я запускаю его на своем ноутбуке, которым пользуюсь только я, и если я не настроил статус администратора правильно, я не знаю, что происходит.

Я разместил свой код ниже, чтобы быть уверенным

Приветствие.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Threading;

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
namespace WindowsFormsApplication1
{


    public partial class Form1 : Form
    {
        delegate void addlistitemcallback(string value);
        public static string inputdata;
        public static int MaximumSpeed, maximumRiderInput, RiderInput, Time, CurrentSpeed, DistanceTravelled, MaximumMotorOutput, MotorOutput, InputSpeed;
        public static string SaveDataString;
        public Thread Serial;
        public static SerialPort SerialData;
        public static string[] portlist = SerialPort.GetPortNames();
        public static string[] SaveData = new string[4];
        public static string directory = "C:\\";

        public Form1()
        {
            Serial = new Thread(ReadData);
            InitializeComponent();
            int Count = 0;
            for (Count = 0; Count < portlist.Length; Count++)
            {
                ComPortCombo.Items.Add(portlist[Count]);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void StartDataButton_Click(object sender, EventArgs e)
        {
            SerialData = new SerialPort(ComPortCombo.Text, 19200, Parity.None, 8, StopBits.One);
            SerialData.Open();
            SerialData.WriteLine("P");
            Serial.Start();
            StartDataButton.Enabled = false;
            EndDataButton.Enabled = true;
            ComPortCombo.Enabled = false;
            CurrentSpeed = 0;
            MaximumSpeed = 0;
            Time = 0;
            DistanceTravelled = 0;
            MotorOutput = 0;
            RiderInput = 0;
            SaveData[0] = "";
            SaveData[1] = "";
            SaveData[2] = "";
            SaveData[3] = "";
            SaveDataButton.Enabled = false;
            if (SerialData.IsOpen)
            {
                ComPortStatusLabel.Text = "OPEN";
                SerialData.NewLine = "/n";
                SerialData.WriteLine("0");
                SerialData.WriteLine("/n");
            }
        }
        private void EndDataButton_Click(object sender, EventArgs e)
        {
            SerialData.Close();
            SaveDataButton.Enabled = true;
            //SerialData.WriteLine("1");
            //SerialData.WriteLine("0");
            if (!SerialData.IsOpen)
            {
                ComPortStatusLabel.Text = "CLOSED";
            }
            int i = 0;
            for (i = 0; i < 4; i++)
            {
                if (i == 0)
                {
                    SaveDataString = "MaximumSpeed during the Ride was = " + Convert.ToString(MaximumSpeed) + "m/h";
                    SaveData[i] = SaveDataString;
                }
                if (i == 1)
                {
                    SaveDataString = "Total Distance Travelled = " + Convert.ToString(DistanceTravelled) + "m";
                    SaveData[i] = SaveDataString;
                }
                if (i == 2)
                {
                    SaveDataString = "Maximum Rider Input Power = " + Convert.ToString(maximumRiderInput) + "Watts";
                    SaveData[i] = SaveDataString;
                }
                if (i == 3)
                {
                    SaveDataString = "Maximum Motor Output Power = " + Convert.ToString(MaximumMotorOutput) + "Watts";
                    SaveData[i] = SaveDataString;
                }
            }

        }

        private void SaveDataButton_Click(object sender, EventArgs e)
        {
            //File.WriteAllBytes(directory + "image" + imageNO + ".txt", ); //saves the file to Disk    
            File.WriteAllLines("C:\\" + "BikeData.txt", SaveData);
        }

        public void updateSpeedtextbox(string value)
        {
            if (SpeedTextBox.InvokeRequired)
            {
                addlistitemcallback d = new addlistitemcallback(updateSpeedtextbox);
                Invoke(d, new object[] { value });
            }
            else
            {
                SpeedTextBox.Text = value;
            }


        }
        public void updatePowertextbox(string value)
        {
            if (RiderInputTextBox.InvokeRequired)
            {
                addlistitemcallback d = new addlistitemcallback(updatePowertextbox);
                Invoke(d, new object[] { value });
            }
            else
            {
                RiderInputTextBox.Text = value;
            }


        }
        public void updateDistancetextbox(string value)
        {
            if (DistanceTravelledTextBox.InvokeRequired)
            {
                addlistitemcallback d = new addlistitemcallback(updateDistancetextbox);
                Invoke(d, new object[] { value });
            }
            else
            {
                DistanceTravelledTextBox.Text = value;
            }


        }
        public void updateMotortextbox(string value)
        {
            if (MotorOutputTextBox.InvokeRequired)
            {
                addlistitemcallback d = new addlistitemcallback(updateMotortextbox);
                Invoke(d, new object[] { value });
            }
            else
            {
                MotorOutputTextBox.Text = value;
            }


        }
        public void ReadData()
        {
            int counter = 0;

            while (SerialData.IsOpen)
            {
                if (counter == 0)
                {
                    try
                    {
                        InputSpeed = Convert.ToInt16(SerialData.ReadChar());

                        if (CurrentSpeed > MaximumSpeed)
                        {
                            MaximumSpeed = CurrentSpeed;
                        }
                        updateSpeedtextbox("Current Wheel Speed = " + Convert.ToString(InputSpeed) + "Km/h");
                        DistanceTravelled = DistanceTravelled + (Convert.ToInt16(InputSpeed) * Time);
                        updateDistancetextbox("Total Distance Travelled = " + Convert.ToString(DistanceTravelled) + "Km");
                    }
                    catch (Exception) { }
                }
                if (counter == 1)
                {
                    try
                    {
                        RiderInput = Convert.ToInt16(SerialData.ReadChar());
                        if (RiderInput > maximumRiderInput)
                        {
                            maximumRiderInput = RiderInput;
                        }
                        updatePowertextbox("Current Rider Input Power =" + Convert.ToString(RiderInput) + "Watts");
                    }
                    catch (Exception) { }
                }
                if (counter == 2)
                {
                    try
                    {
                        MotorOutput = Convert.ToInt16(SerialData.ReadChar());
                        if (MotorOutput > MaximumMotorOutput)
                        {
                            MaximumMotorOutput = MotorOutput;
                        }

                        updateMotortextbox("Current Motor Output = " + Convert.ToString(MotorOutput) + "Watts");
                    }
                    catch (Exception) { }
                }
                counter++;
                if (counter == 3)
                {
                    counter = 0;
                }
            }
        }      


        private void Form1_Closed(object sender, EventArgs e)
        {
            if (SerialData.IsOpen)
            {
                SerialData.Close();
            }
        }

        private void ComPortCombo_SelectedIndexChanged(object sender, EventArgs e)
        {
            StartDataButton.Enabled = true;
        }

        private void DistanceTravelledTextBox_TextChanged(object sender, EventArgs e)
        {

        }





    }
}

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Возможно, у вас нет прав на запись в C: \.Попробуйте вместо этого изменить путь сохранения на «C: \ Users \ {YouName} \ Documents \ BikeData.txt».

Или запустите Visual Studio с правами администратора, щелкнув правой кнопкой мыши его значок и выбрав «Запуск от имени администратора».

0 голосов
/ 24 ноября 2010

File.WriteAllLines ("C: \" + "BikeData.txt", SaveData);

File.WriteAllLine (string, string []) через «SecurityException», когда у пользователя нет прав на запись в конкретном директории или диске, поэтому вам нужно дать разрешение на запись, обратитесь по этой ссылке File.WriteAllLines

...