ネットワーク ハード ドライブの ASP.NET デザイン フォルダーの実装
著者:Eve Cole
更新時間:2009-06-30 15:39:42
「ネットワーク ハード ドライブ」の概念を紹介したときに述べたように、各ユーザーは「ネットワーク ハード ドライブ」上に自分のスペースを持っています。これは、次のプログラム設計でどのように処理されるかです。固定フォルダーがユーザーに提供され、ユーザーはその下で新しいフォルダーまたはファイルを追加/削除できます。図 1 に示すように、Web ページを初めて開くと、フォルダー内のすべてのコンテンツ (ファイルとフォルダーを含む) がリストされます。次のレベルのフォルダーに入りたい場合は、フォルダーを選択して「開く」ボタンをクリックして入ることができます。フォルダーの内容を表示する機能の実装については、以下で順を追って説明します。
図 1 ユーザーのメインインターフェイス |
1. ページの読み込み
プログラムによって提供されるユーザー ディレクトリは c:UserDir などに固定されており、ページがロードされた後にフォルダーのすべてのコンテンツを表示する必要があるため、対応する操作を Page_Load で実行する必要があります。まず、フォルダーが存在するかどうかを確認します。存在しない場合は、最初に作成してから、フォルダー内の内容をリストする必要があります。コードは次のように実装されます。
private void Page_Load(オブジェクト送信者、System.EventArgs e) { //ここにユーザーコードを入力してページを初期化します
if(Page.IsPostBack==false) { CurrentPath= @"c:UserDir"; //現在のディレクトリを設定します if(Directory.Exists(@"c:UserDir")==false) //ディレクトリが存在しない場合は、ディレクトリを作成します。 CreateDirectory( @"c:UserDir"); LoadDir(CurrentPath); //読み込みディレクトリを初期化します。 }
|
LoadDir(string FullPath) メソッドは、フォルダー内のすべてのコンテンツを一覧表示するために使用されます。コードは次のとおりです。
プライベート void LoadDir(string FullPath) { 現在のパス=フルパス; ArrayList 値 = new ArrayList(); 文字列 [] MyFiles,MyDirs; MyFiles = Directory.GetFiles(FullPath); //ディレクトリ内のすべてのファイルを取得します if(CurrentPath!=@"c:UserDir") //それが最上位ディレクトリでない場合は、「上のディレクトリに戻る」オプションを追加します{ value.Add("上のディレクトリに戻る"); }
value.AddRange(MyFiles); // ファイルを追加します。 MyDirs= Directory.GetDirectories(FullPath); // このディレクトリ内のすべてのディレクトリを取得します。 value.AddRange(MyDirs); // ディレクトリを追加します。 FileList.DataSource=values; FileList.DataBind(); // データをバインドします。 } |
まず、最上位ディレクトリのすべての内容 (フォルダー名とファイル名を含む) を格納する ArrayList 配列オブジェクトの値を定義します。 Directory.GetFiles() メソッドは、最上位ディレクトリ内のすべてのファイル名を返します。その戻り値の型は文字列配列であるため、返されたファイル名を保存するには文字列クラス オブジェクト MyFiles を定義する必要があります。最上位ディレクトリ内のファイルをフォルダー名に保存するための文字列配列オブジェクト MyDirs も定義します。これを完了すると、MyFiles 配列と MyDirs 配列を値オブジェクトに追加できます。最後に行うことは、データ ソースを追加し、データを ListBox コントロール オブジェクト FileList にバインドすることです。 1 つ説明する必要があります。現在のディレクトリが最上位ディレクトリではない場合、上位ディレクトリに戻ることができる必要があります。これを行うには、「上位ディレクトリに戻る」を追加する必要があります。 FileList のオプション。
2. 複数レベルのディレクトリの表示
前のセクションで示した 2 つのコードを使用すると、ページの読み込み時に最上位ディレクトリ内のすべてのコンテンツを一覧表示できます。もちろん、最上位ディレクトリの内容をリストするだけでは十分ではありません。Windows オペレーティング システムと同様に、ネットワーク ハードディスク内のフォルダ ディレクトリもネストされており、2 つ以上のレベルのフォルダ ディレクトリがあります。この目的のために、ユーザーが複数レベルのフォルダーの内容を表示できるように、対応する処理を実行する必要があります。以前のインターフェイスのデザインには、[開く] ボタンがあり、ユーザーが対応するフォルダーを選択した後、ボタンをクリックするとフォルダーの内容が表示されます。
次に、「開く」ボタンのコードを追加します。 「デザイン」パネルのボタンをダブルクリックすると、システムが自動的にイベントを追加します。コードの内容は次のとおりです。
private void btnOpen_Click(オブジェクト送信者、System.EventArgs e) { if(FileList.SelectedItem.Text=="上位ディレクトリに戻る") //上位ディレクトリに戻る{ string ParentPath=Directory.GetParent(CurrentPath).ToString(); LoadDir(親パス); 戻る; } else //ディレクトリを開く{ LoadDir(FileList.SelectedItem.Text); } } |
プログラムはまず、ユーザーが「上のディレクトリに戻る」を選択したかどうかを判断します。その場合は、まず Directory.GetParent() メソッドを通じて上位レベルのフォルダー名を返し、ユーザーが「上位レベルに戻る」を選択しなかった場合は、次に LoadDir() メソッドを呼び出してディレクトリの内容を表示する必要があります。 directory" ではなくフォルダー名である場合は、LoadDir() メソッドを直接呼び出すことができます。 FileList.SelectedItem.Text は選択したフォルダー名であり、LoadDir() メソッドのパラメーターとして使用されます。