2

私は、ユーザーがいくつかのデータで満たされたカスタム テンプレートからファイルをエクスポートできるようにするアプリケーションを持っています。現在、ユーザーは保存先を選択できます。ファイルが既に存在する場合は、好みに応じて上書きするか、新しい名前を生成します。

エクスポート先のフォルダー/ファイル名、およびファイルが存在するかどうかにかかわらず上書きするかどうかは、ユーザーが作成して保存する構成ファイルに保存されます。次に、このファイルを実行するだけで、アプリケーションはデータの収集とこれらのファイルのエクスポートを開始します。

危険なのは、C ドライブに保存する構成ファイルを送信して、それを開いて実行するだけで、C ドライブにあるファイルがたまたま同じである場合に上書きされる可能性があることです。名前。私が考えているのは、ファイルを保存するフォルダーをユーザーに選択させ、この設定を構成ファイルではなくユーザー設定として保存することです。そのため、構成ファイルを指定すると、このファイルは何にでもエクスポートされますエクスポート先として選択したフォルダー。ただし、構成ファイルはファイル名を決定します。

ファイル名として有効なファイル文字のみを入力するように強制するのは簡単です (その\文字は除外されます)。エクスポートされたファイルをより適切に整理できます。しかし..\..\something_important.exe、そうすると、ユーザーがエクスポート用に定義したフォルダーの外に保存されるようなものを入力できます。\sub\subsub\myfile.txtのようなパスに入ることができるようにするにはどうすればよいでしょうか..\..\myfile.txt..\パスに文字列が含まれていないことを確認するだけで十分でしょうか? ..\フォルダ ツリーを上に移動できるような他のコードはありますか?

4

3 に答える 3

2

FolderBrowserDialogを使用して、ユーザーがフォルダーを選択できるようにすることをお勧めします。これは、ユーザーがおそらく使用経験のある一般的なダイアログです。ユーザーが選択できるフォルダーに関する追加のルールがある場合は、ユーザーがフォルダーを選択した後にこの検証を実行し、ユーザーがルートフォルダーを選択した場合は拒否できます。

FolderBrowserDialog

( C# の FolderBrowserDialogから取得した画像。)

于 2012-08-05T21:18:23.683 に答える
1

Path.GetFullPath最終パスの検証に使用できると思います

string myRootPath = @"c:\root\subdir\";
var newPath = Path.Combine(myRootPath, @"..\..\windows\aaa"); //user enters ..\..\windows\aaa
var usersPath = Path.GetFullPath(newPath);

if (!usersPath.StartsWith(myRootPath))
    MessageBox.Show("ALERT");
于 2012-08-05T21:23:40.500 に答える
1

I don't really understand why this application is so complicated but I always believe in the KISS method (Keep It Simple and Stupid). I also believe that the UI (user interface) should always lead the user to do what is good for him and not punish him for trying things it should'nt have done.

I suggest you create a form that open in the wanted folder and that have a button to create new folder and a textbox like the SaveFileDialog. The difference will be that it doesn't let the user go into other folder. In this scenario, the user can only write a filename into the textbox and you validate the text to be a valid name. No need for the user to specify a path in the text since the UI will provide him with easier way.

This simple form can be program in a couple of minutes and it will be solid as a rock. Hope it helps!

于 2012-08-05T21:04:26.053 に答える