2016-11-11 13 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"); 
    } 

最も私を悩ませている事は、私がここにSO上で複数のスレッドの投稿に見られる、これを行うには、いくつかの方法を試してみましたということです。誰も期待どおりにアプリケーションを壊すことはありませんが、何も起こりません。コードが完全にスキップされているか無視されているかのようです。誰かが不思議に思うなら、System.IOをネームスペースに導入しました。このアプリはWinFormsアプリです。

私はC#と基本的には一般的なプログラミングの完全なnoobですが、これはとても簡単なようです。どんな助けでも多くのありがとう...

EDIT:コードの最初の部分です。これは、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); 

また、フォームデザイナーでloadイベントをサブスクライブすることもできます。 F4キーを使用してプロパティダイアログを表示し、フォームのタイトルバーをクリックしてプロパティ(稲妻)のイベントに移動します。イベントの名前はLoadです。

Properties Dialog


おそらく、フォームのLoadイベントをサブスクライブしませんでした。クラス名がTestFormであると仮定すると、これに似ていなければなりません。イベントにはコンストラクタ内の2番目の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

ありがとうございます。これはまさに欠けていたものです。それは今私には非常に明確です... :) –

+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); 
} 

おかげで、私は、私は、イベントハンドラが呼び出されていることを確認し、右...

関連する問題