2016-11-11 125 views
0

這是一個足夠簡單的主題,但我無法在正在處理的應用程序中創建文件夾。我在診斷問題時遇到了問題。該應用運行良好的代碼,但沒有創建文件和文件夾。文件夾和設置文件的位置將位於AppData \ Roaming中。這裏是我使用的代碼,我相信這是正確的:這是最困擾我在C#項目的AppData中創建文件夾時遇到的問題

private void TestForm_Load(object sender, EventArgs e) 
    { 
     string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     if (!Directory.Exists(path + "\\TestFolder")) 
      Directory.CreateDirectory(path + "\\TestFolder"); 
     if (!File.Exists(path + "\\TestFolder\\settings.xml")) 
      File.Create(path + "\\TestFolder\\settings.xml"); 
    } 

的事情是,我嘗試了好幾種方法可以做到這一點,我在這裏有這麼幾種線程發現帖子。沒有人按預期打破應用程序,但沒有任何反應。就好像代碼被完全跳過或忽略一樣。如果有人想知道,我已經將System.IO引入命名空間。該應用程序是一個WinForms應用程序。

我是C#的完全noob,基本上是編程,但這似乎很簡單。非常感謝您的幫助...

編輯:這是代碼的第一部分。這直接在Form.cs(TestForm.cs)文件的前面。也許這將幫助:

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; 

namespace WindowsFormsApplication1 
{ 
    public partial class TestForm : Form 
    { 
     public TestForm() 
     { 
      InitializeComponent(); 
     } 
+0

確保事件處理函數被調用。在第一行設置一個斷點並在調試模式下運行你的應用程序。也許事件處理程序沒有附加到TestForm? –

+0

道歉,試圖在這裏添加一些代碼... –

+0

請參閱http://stackoverflow.com/a/9847686/1260204。您可能沒有訂閱OnLoad事件。 – Igor

回答

1

如果這是從來沒有被擊中你缺少的訂閱了該事件的線。

Load += new EventHandler(TestForm_Load); 

您還可以訂閱窗體設計器中的加載事件。使用F4查看屬性對話框,單擊表單標題欄,然後導航到屬性中的事件(閃電)。活動的名稱是Load

Properties Dialog


您可能沒有訂閱窗體的Load事件。假設類名是TestForm,它應該與此類似,附加到事件是構造函數中的第二個loc。

public partial class TestForm : Form { 

    public TestForm() 
    { 
     InitializeComponent(); 
     Load += new EventHandler(TestForm_Load); // !! Add this line !! 
    } 

    private void TestForm_Load(object sender, EventArgs e) 
    { 
     string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     if (!Directory.Exists(path + "\\TestFolder")) 
      Directory.CreateDirectory(path + "\\TestFolder"); 
     if (!File.Exists(path + "\\TestFolder\\settings.xml")) 
      File.Create(path + "\\TestFolder\\settings.xml"); 
    } 
} 
+0

Thankyou。這正是缺少的。這一切都很清楚,現在哈哈... :) –

+0

@BoMcCullough - 很高興爲你工作。請考慮接受答案(請參閱[如何接受答案](http://meta.stackexchange.com/a/5235))。 – Igor

0

只是編碼風格的說明 - 我切換到使用構建「安全」路徑Path.Combine方法。像這樣:

private void TestForm_Load(object sender, EventArgs e) 
{ 
    string directory = Path.Combine(Environment.SpecialFolder.ApplicationData, "TestFolder"); 
    if (!Directory.Exists(directory)) 
     Directory.CreateDirectory(directory); 

    string file = Path.Combine(directory, "settings.xml"); 
    if (!File.Exists(file)) 
     File.Create(file); 
} 

謝謝,我希望我說對了......