2016-03-31 14 views
0

私はC#でコンソールアプリケーションを持っていますが、xmlファイルをロードしたいのですが、ファイルへのパスはconsole.readline )。しかし、私は提供されたパスからファイルをロードしたいと思いますが、ユーザーがファイル名のみを提供している場合は、アプリケーションが実行されているローカルフォルダ内でファイルの名前を検索したいと思います。ファイル名のみを入力またはファイルのフルパスとして取得する方法を知るにはどうすればよいですか。 私はそれを使用して管理しました:var isFileNameOnly = ((xmlFilePath.IndexOf("\\")) == -1);コンソールからの入力がファイル名またはファイルフルパスであるかどうかを確認する方法

しかし、これはおそらく非常にバグがあります。

全コード:

 var xmlFilePath = Console.ReadLine(); 
     var xmlFile = new XmlDocument(); 

     var isFileNameOnly = ((xmlFilePath.IndexOf("\\")) == -1); 
     try 
     { 
      if (isFileNameOnly) 
      { 
       xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, xmlFilePath); 
      } 

      xmlFile.Load(xmlFilePath); 

     } 

Thxを

答えて

1

ユーザーが入力したファイル名が実際に存在する()メソッドを使用して存在するかどうかをチェックすることができます。 trueを返した場合はファイルをロードします。唯一のファイル名を提供

また
File.Exists(xmlFilePath) 

XmlDocument.Load()の場合はBaseDirectory自体にファイルを見つけようとします。したがって、file.Exists()がtrueを返す場合は、XmlDocument.Loadがローカルまたは絶対パスであるかどうかにかかわらずロードすると仮定できます。

+0

うん、しかし、私は、コマンドライン(CMD)からアプリを実行しようとした場合、XmlDocument.Loadは()を見つけるためにしようとします:あなたはこのようにそれをしなかった場合多分それはもう少しエレガントになりますBaseDirectoryではなくC:\ user \ myuser \にあるので、BaseDirectoryパスをファイルに追加できるようにファイルであるかどうかを知る必要があります。私は基本ディレクトリを添付して、それが存在するかどうかを確認すると思います。 thx – TBogdan

0

これはfalseを返します:

bool isFolder = Path.IsPathRooted(@"Text.txt"); 

これはtrueを返します:

bool isFolder = Path.IsPathRooted(@"C:\Text"); 
+0

これは、ユーザーが相対パスを指定した場合は機能しません。 –

0

あなたのアプローチは、私が選んだのと同じです。 paramにディレクトリ区切り文字charが含まれていない場合は、ファイル名のみでなければなりません。

bool isFileNameOnly = !xmlFilePath.Contains(Path.DirectorySeparatorChar.ToString()); 
関連する問題