2016-08-30 90 views
-3

我爲我父親創建了一個應用程序。這只是一個簡單的聽寫程序。事情是,當他安裝在他的電腦上,它停滯不前,並說一般訪問被拒絕錯誤。帶環境的文件夾瀏覽器對話框

的第一次給了我以前SaveFileDialog sfd = new SaveFileDialog()錯誤,然後加入通常是「if語句」,以確保對話是好的,但應用程序有一個訪問文件被拒絕。

我做同樣的事情Environment.GetFolder而且它安裝在他的電腦上的位置並且運行良好,但是當我使用工具箱中的saveFileDialog1openFileDialog1時,它並不保存或打開一個txt文檔。這可能是由於代碼與他的電腦有錯誤。還有什麼是正確的方式使用Environement.GetFolderSaveFileDialog

如果需要,我也可以將完整的代碼發佈到程序中。

private void lblOpenFile_Click(object sender, EventArgs e) 
    { 

     OpenFileDialog open = new OpenFileDialog(); 
     open.Title = "Open File"; 
     open.Filter = "Text Files (*txt) | *.txt"; 

     if (open.ShowDialog() == DialogResult.OK) 
     { 
      StreamReader read = new StreamReader(File.OpenRead(open.FileName)); 

      txtTextBox.Text = read.ReadToEnd(); 
      read.Dispose(); 
     } 
    } 

    private void lblSaveFile_Click(object sender, EventArgs e) 
    { 

     SaveFileDialog save = new SaveFileDialog(); 
     save.Title = "Save File"; 
     save.Filter = "Text Files (*txt) | *.txt"; 

     if (save.ShowDialog() == DialogResult.OK) 
     { 
      StreamWriter write = new StreamWriter(File.Create(save.FileName)); 

      write.Write(txtTextBox.Text); 
      write.Dispose(); 
     } 
    } 

這是我在屏幕錄像機上使用的Enviroment。我當我點擊保存它會調出一個對話框,我把文件名按保存,它什麼都不做。它保存文件,但不是我指定的。所以我試圖合併上面和下面的代碼。上面的代碼不授予訪問權限但下面確實

string OutputPath;  

OutputPath = Environment.GetFolderPath(Environment.SpecialFolder.MyVideos) + @"\\IvanSoft Desktop Recorder" + saveFileDialog1; 


private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) 
    { 
     string fileName = saveFileDialog1.FileName; 
     fileName = "Tutorial";  
    } 

整個代碼的程序

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.IO; 
using System.Speech.Recognition; 
using System.Threading; 

namespace AGM_Speech 
{ 
    public partial class Form1 : Form 
    { 
     public SpeechRecognitionEngine recognizer; 
     public Grammar grammar; 
     public Thread RecThread; 
     public Boolean RecognizerState = true; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void lblAbout_Click(object sender, EventArgs e) 
     { 
      this.Hide(); 
      About about = new About(); 
      about.Show(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      GrammarBuilder builder = new GrammarBuilder(); 
      builder.AppendDictation(); 


      grammar = new Grammar(builder); 
      recognizer = new SpeechRecognitionEngine(); 
      recognizer.LoadGrammarAsync(grammar); 
      recognizer.SetInputToDefaultAudioDevice(); 

      recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized); 

      RecognizerState = true; 
      RecThread = new Thread(new ThreadStart(RecThreadFunction)); 
      RecThread.Start(); 
     } 

     private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
     { 

      if (!RecognizerState) 
       return; 

      this.Invoke((MethodInvoker)delegate 
      { 
       txtTextBox.Text += (e.Result.Text.ToLower() + " "); 
       txtTextBox.SelectionStart = txtTextBox.Text.Length - 0; 
       txtTextBox.SelectionLength = 0; 

      }); 
     } 

     public void RecThreadFunction() 
     { 
      while (true) 
      { 
       try 
       { 
        recognizer.RecognizeAsync(); 
       } 
       catch 
       { 

       } 


      } 
     } 

     private void lblStartSpeech_Click(object sender, EventArgs e) 
     { 
      RecognizerState = true; 

     } 

     private void lblStopSpeech_Click(object sender, EventArgs e) 
     { 
      RecognizerState = false; 
     } 

     private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      RecThread.Abort(); 
      RecThread = null; 
      grammar = null; 
      recognizer.UnloadAllGrammars(); 
      recognizer.Dispose(); 


     } 

     private void lblOpenFile_Click(object sender, EventArgs e) 
     { 

      string open = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

      StreamReader reader = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); 


     } 

     private void lblSaveFile_Click(object sender, EventArgs e) 
     { 

      SaveFileDialog save = new SaveFileDialog(); 
      save.Title = "Save File"; 
      save.Filter = "Text Files (*txt) | *.txt"; 

      if (save.ShowDialog() == DialogResult.OK) 
      { 
       StreamWriter write = new StreamWriter(File.Create(save.FileName)); 

       write.Write(txtTextBox.Text); 
       write.Dispose(); 
      } 
     } 




     private void txtSearch_Click(object sender, EventArgs e) 
     { 
      txtSearch.Clear(); 
      lblGo_Click(null, null); 
     } 

     private void txtSearch_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (e.KeyChar == (char)ConsoleKey.Enter) 
      { 
       lblGo_Click(null, null); 

      } 
     } 

     private void lblGo_Click(object sender, EventArgs e) 
     { 
      int index = 0; 
      String temp = txtTextBox.Text; 
      txtTextBox.Text = ""; 
      txtTextBox.Text = temp; 

      while (index <= txtTextBox.Text.LastIndexOf(txtSearch.Text)) 
      { 
       txtTextBox.Find(txtSearch.Text, index, txtTextBox.TextLength, RichTextBoxFinds.None); 
       txtTextBox.SelectionColor = Color.YellowGreen; 
       index = txtTextBox.Text.IndexOf(txtSearch.Text, index) + 1; 
      } 
     } 
    } 
} 
+0

你是你的機器上的管理員....他是他的管理員?訪問被拒絕是一個權限錯誤。 – Sorceri

+0

他是他的機器上的管理員,我是我的管理員。 – campnerd

+0

幾周前,我製作了自己的桌面錄像機,並使用了'Enviroment.GetFolderPath',並將它部署到另一臺計算機上並且工作正常。但是我無法更改文件的名稱。所以我想知道如果我這樣做,它會工作,但是當文件的名稱輸入在我必須使用文本框或我可以只使用SaveFileDialog來更改文本 – campnerd

回答

0

很難說得清你失敗,因爲沒有在路上多嘗試/捕捉或記錄。

您可以使用它來粘貼顯示在消息框中的堆棧跟蹤嗎?

private string fileOutputLocation { get; set; } 

private void lblSaveFile_Click(object sender, EventArgs e) 
{ 
    bool fileSelected = false; 
    Try(() => 
    { 
     SaveFileDialog save = new SaveFileDialog(); 
     save.Title = "Save File"; 
     save.Filter = "Text Files (*txt) | *.txt"; 
     save.InitialDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), "IvanSoft Desktop Recorder"); 

     if (save.ShowDialog() == DialogResult.OK) 
     { 
     fileOutputLocation = save.FileName; 
     fileSelected = true; 
     } 
    }); 
    if (fileSelected) 
    { 
     bool fileSaved = SaveFile(); 
     MessageBox.Show("File saved successfully: " + fileSaved.ToString()); 
    } 
} 

private bool SaveFile() 
{ 
    TryDeleteFile(); 

    bool fileSaved = false; 

    Try(()=> 
    { 
    File.WriteAllText(fileOutputLocation, txtTextBox.Text); 
    fileSaved = true; 
    }); 

    return fileSaved; 
} 

private void TryDeleteFile() 
{ 
    Try(()=> 
    { 
     if (File.Exists(fileOutputLocation)) 
     { 
     File.Delete(fileOutputLocation); 
     } 
    }); 
} 

private void Try(Action action) 
{ 
    try 
    { 
     action(); 
    } 
    catch (Exception e) 
    { 
     MessageBox.Show(string.Format("The following exception was thrown:\r\n{0}\r\n\r\nFile path: {1}", e.ToString(), fileOutputLocation)); 
    } 
} 

有了這個,再加上記錄到Windows事件查看器(開始>運行> EVENTVWR>安全)事件,我們應該能夠告訴你問題是什麼。

最後,如果您只是提供可運行的可執行文件,則應該檢查該文件的屬性以確保它不會在Windows中被阻止。

+0

我可以做的是發佈整個代碼,有SaveFileDialog,所以你可以看到程序的整個代碼只有大約100行代碼。此外這個應用程序只是一個小記筆記應用程序。我的爸爸不喜歡MS演講,因爲它暫停了,他不喜歡這個佈局。所以應用程序只是省略了一切,並通過應用程序。它只是一個基本應用程序。現在「環境」部分位於我的自定義桌面屏幕閱讀器中。我在win8.1中構建它,並將其部署到10.我可以這樣做,它只是將文件保存爲他所鍵入的文件。這是我的問題。我將把整個代碼放在 – campnerd

+1

的問題中我仍然會要求你運行這段代碼並提供詳細信息。沒有足夠的細節來說明你提供什麼來進一步運行它。我所要求的代碼和細節將爲我們提供必要的數據。問題顯然是環境問題,但沒有獲得詳細信息,我們無法再幫助您。 – Jake

+0

我不得不修改它,因爲它會拋出一些類似''''和'(''的一般性錯誤,並且我將無法測試它,直到今晚晚些時候我將下載鏈接發送給我的父親。其他筆記本電腦我不得不測試它在這裏它被送到服務商店爲一個新的Mobo所以我會明天發佈結果 – campnerd