リモートコンピューターからファイルを削除する
-
04-07-2019 - |
質問
リモートコンピューターからXMLファイルを含むディレクトリを削除しようとしています。私のコードはコンパイルして正常に実行されますが、指定したパスでXMLファイルのリストを取得しようとすると、何も返されません。賢明な何かが欠けていますか?
自分としてログオンしたコンピューターと、別のユーザーとしてログオンした別のコンピューターから実行しました。両方のアカウントは、XMLファイルを含むディレクトリを完全に制御できます。
.NET 2.0を使用しています。
static void Main(string[] args) {
string directory, ext = ".xml"; // have tried xml and .xml
if (args.Length != 1) {
// do absolutely nothing if we do not exactly 1 argument
} else {
Console.WriteLine("Argument accepted.");
directory = args[0];
// make sure the directory passed is valid
if (ValidateDirectory(directory)) {
Console.WriteLine("Directory is valid.");
DeleteFiles(directory, ext);
}
}
Console.WriteLine("Done.");
}
static bool ValidateDirectory(string d) {
return Regex.IsMatch(d, @""); // I removed my regex - it validates properly
}
static void DeleteFiles(string d, string ext) {
DirectoryInfo di;
FileInfo[] fi;
di = new DirectoryInfo(d);
fi = di.GetFiles(ext);
Console.WriteLine("Number of files = " + fi.Length + ".");
foreach (FileInfo f in fi) {
try {
Console.WriteLine(f.FullName);
f.Delete();
} catch (Exception ex) {
// do nothing when there is an exception
// just do not want it to quit
Console.WriteLine(ex.ToString());
}
}
}
解決
単に.xmlではなく* .xmlを使用する必要があると思います。しかし、キラレッサにも同意し、まずローカルマシンでテストしてから、ネットワークを経由する複雑さを追加します。
他のヒント
DeleteFilesには、次の行があります。
fi = di.GetFiles(ext);
ここで、extは渡す拡張子です。これは単なる「.xml」だと思います。 Get filesは、「。xml」というファイルを探しています。 GetFilesはワイルドカードを使用しますが、これはあなたがしようとしていることです。前面にアスタリスク(*)を付けて、試してみてください。
-Brett
フォローアップ:
*。xmlを使用する必要があり(それを知っているはずです!)、今では動作します。
このサイトは素晴らしい!
ネットワークパスを通過していると思いますか? ローカルパスでプログラムを実行すると失敗しますか? この行は: fi = di.GetFiles(ext); fileInfoオブジェクトを返しますか?
おそらく、何らかのデバッグで修正できる何か小さな問題があるだけです。
引数として何を渡しますか?マップされたドライブまたは直接参照(つまり// server / folder)を使用していますか?
ValidateDirectoryの代わりに、Directory.Exists(directory)を使用して、ディレクトリをまったく表示できるかどうかを確認する必要があります。