0

ファイルを読み取って何かを書き出す単純なコンソール ツールを作成しました。ファイルをドラッグアンドドロップするだけで、入力ファイルと同じディレクトリに出力がポップされます。

すべてのテストが機能し、コマンドラインから呼び出すと、すべてが期待どおりになります。しかし、エクスプローラーでドラッグアンドドロップしてみたところ、ファイルが作成されませんでした。

システム全体を検索したところ、それらはすべて、ユーザー フォルダーの下の Documents and Settings にダンプされていることがわかりました。

これは奇妙です。Path.GetFullPath入力ファイルの絶対パスを返しませんか? 代わりに、そのユーザー ディレクトリ パスを入力のファイル名に結合しただけのように見えます。

編集:これがコードです。どこかで論理エラーを起こしたような気がしますが、それを見ることができないようです。

filename = System.IO.Path.GetFileName(args[i]);
abspath = Path.GetFullPath(filename);
dirpath = Path.GetDirectoryName(abspath);
....
Console.WriteLine(dirpath);
4

1 に答える 1

1

Path.GetFullPathは、渡したパス文字列の絶対パスを返す必要があります。

Path.GetFileName(string path)は、渡したファイルのファイル名と拡張子のみを返します。たとえば、System.IO.Path.GetFileName("C:\SomeDirectory\Test.txt");「Test.txt」を返すだけです。次のように、 Path.GetDirectoryNameを使用して入力ファイルのパスを取得します。

string inputDirectory = System.IO.Path.GetDirectoryName(args[i]);

または、FileInfoクラスを使用して、入力ファイルに関するさらに多くの情報を取得することもできます。例えば:

// Assuming args[i] = "C:\SomeDirectory\Test.txt"
FileInfo inputFile = new FileInfo(args[i]);
string inputDirectory = inputFile.DirectoryName; // "C:\SomeDirectory"
string inputFileName = inputFile.Name; // "Test.txt"
string fullInputFile = inputFile.FullName; // "C:\SomeDirectory\Test.txt"
于 2012-06-10T02:00:42.203 に答える