2014-11-03 111 views
0

我是Visual Studio的新手,我正在嘗試創建一個.ahk文件的應用程序。我的問題是,當應用程序啓動時,我需要它創建幾個文件/文件夾。要做到這一點,我添加以下代碼C#WPF - 嘗試在應用程序啓動時創建文件時出錯

public MainWindow() 
{ 
    InitializeComponent(); 
    int i = 1; 
    while (i < 6) 
    { 
     string comp_name = System.Environment.UserName; 
     System.IO.File.Create(@"C:\Users\" + comp_name + @"\Documents\KeyBind\" + i + @"\Modifier.txt"); 
     System.IO.File.Create(@"C:\Users\" + comp_name + @"\Documents\KeyBind\" + i + @"\Key.txt"); 
     System.IO.File.Create(@"C:\Users\" + comp_name + @"\Documents\KeyBind\" + i + @"\Me_Do.txt"); 
     System.IO.File.Create(@"C:\Users\" + comp_name + @"\Documents\KeyBind\" + i + @"\Text.txt"); 
     System.IO.File.Create(@"C:\Users\" + comp_name + @"\Documents\KeyBind\" + i + @"\Bind" + i + @".txt"); 
     System.IO.File.Create(@"C:\Users\" + comp_name + @"\Documents\KeyBind\Bind.ahk"); 
     i++; 
    } 
} 

這將導致以下錯誤

> An unhandled exception of type 
> 'System.Windows.Markup.XamlParseException' occurred in 
> PresentationFramework.dll 
> 
> Additional information: 'The invocation of the constructor on type 
> 'WpfApplication2.MainWindow' that matches the specified binding 
> constraints threw an exception.' Line number '3' and line position 
> '9'. 

不知道這個問題是在這裏。 如果你想看看我在這裏的完整代碼是鏈接Full Code 我知道有很多冗餘代碼我打算修復它,一旦我找到了這一點。任何幫助表示讚賞。

+1

圍繞您在構造函數中的代碼進行try/catch,然後將有關該異常的信息添加到您的問題中。沒有這些例外情況,很難說出問題所在。 – user469104 2014-11-03 16:42:24

+3

你的錯誤是在xaml中,而不是在發佈的代碼中。 – paqogomez 2014-11-03 16:45:30

+0

xmlns:x =「http://schemas.microsoft.com/winfx/2006/xaml」 - 這是來自.xaml的第3行 – 2014-11-03 16:47:42

回答

0

嘗試不使用硬編碼的文檔路徑,並且不要嘗試創建已經存在的目錄。除非缺失,否則您也可能不想創建這些文件。

private void EnsureFiles() 
{ 
    var numberedFiles = new[] { "Modifier.txt", "Key.txt", "Me_Do.txt", "Text.txt" }; 

    var basePath = Path.Combine(
     Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), 
     "KeyBind"); 

    if (!Directory.Exists(basePath)) 
     Directory.CreateDirectory(basePath); 

    var bindAhkPath = Path.Combine(basePath, "Bind.ahk"); 

    if (!File.Exists(bindAhkPath)) 
     File.CreateText(bindAhkPath).Dispose(); 

    for (var i = 1; i < 6; i++) 
    { 
     foreach (var file in numberedFiles) 
     { 
      var numberedPath = Path.Combine(basePath, i.ToString()); 

      if (!Directory.Exists(numberedPath)) 
       Directory.CreateDirectory(numberedPath); 

      var filePath = Path.Combine(numberedPath, file); 

      if (!File.Exists(filePath)) 
       File.CreateText(filePath).Dispose(); 
     } 
    } 
} 

正如其他人所建議的,你可能要動這個方法你的主窗口,並進入你的App類,然後覆蓋OnStartup調用它。

相關問題