2010-11-24 46 views
1

天兒真好傢伙,保存在C#,Visual Studio 2010的文件,錯誤

我有我的程序小錯誤在那裏,當我嘗試保存到文件,該文件說:「A所需的特權不發生錯誤由客戶持有「。我不知道如何解決這個問題,因爲我從我的筆記本電腦上運行它,只有我使用,除非我已正確設置管理員身份,我不知道發生了什麼。

我下面貼只是我的代碼,以確保

乾杯。

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

這似乎使最有意義... – IAbstract 2010-11-24 03:46:43

0

File.WriteAllLines( 「C:\」 + 「BikeData.txt」,保存數據)右鍵單擊啓動Visual Studio具有管理權限的;

File.WriteAllLine(字符串,字符串[]),通過「拋出:SecurityException」當用戶沒有權利在特定directrory寫或驅動器,所以你得給寫權限,請參閱此鏈接File.WriteAllLines