2010-11-24 1 views
1

グッデイの連中を、の保存、エラー

私は、エラーをファイルに保存しようとする私のプログラムで小さな誤差は、「必要な特権がないと言うその発生していクライアントによって保持されます。私は私が使用する私のラップトップのそれを実行していると私は管理者の状態を正しく設定していない限り、私は何が起こっているのか分からないので、これを修正する方法を確認していない。

私は以下のコードを投稿しました。

乾杯。

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

おそらくC:\への書き込みアクセス権はありません。代わりに、保存パスを "C:\ Users \ {YouName} \ Documents \ BikeData.txt"に変更してください。

または右のアイコンをクリックして "管理者として実行"

+0

を特定directroryで書くか、書き込み権限を与える必要がありそうドライブ、このリンクを参照する権限を持っていない場合にこれがそうです最も理にかなって... – IAbstract

0

File.WriteAllLines選択することで、管理者権限を持つのVisual Studioを起動します( "C:\" + "BikeData.txt"、SaveDataをします)。

File.WriteAllLine(文字列、文字列[])、「SecurityExceptionが」を介してユーザがFile.WriteAllLines

関連する問題