ユーザーがローカルおよびリモートのディレクトリを選択できるプログラムを作成します。選択したパスで操作を実行する前に、それが有効かどうか、およびユーザーに読み取り/書き込み権限が付与されているかどうかを確認したいと思います。それが私が持っているものです:
private bool checkInput(string dirPath, string depthStr, string filename)
{
...
string reason = null;
try
{
...
else if ((reason = CAN_ACCESS(dirPath)) == null)
{
if (!(new DirectoryInfo(dirPath)).Exists)
reason = string.Format("The directory '{0}' is no directory or does not exist!", dirPath);
...
}
}
catch (Exception ex)
{
reason = ex.Message;
}
if (reason != null)
{
MessageBox.Show(reason, "Wrong input", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
return true;
}
public static string CAN_ACCESS(string dirPath)
{
Uri uri = new Uri(dirPath);
//UserFileAccessRights rights = new UserFileAccessRights(dirPath);
string errorMsg = null;
if (uri.IsUnc && !haveAccessPermissionOnHost(uri))
{
string domain = new Uri(dirPath).Host;
domain = dirPath;
ErrorClass res = PinvokeWindowsNetworking.connectToRemote(domain, null, null, true);
if (res == null)
return null;
else
errorMsg = string.Format("(Code {0}): {1}", res.num, res.message);
}
return errorMsg;
}
private static bool haveAccessPermissionOnHost(Uri uri)
{
throw new NotImplementedException();
}
主な問題haveAccessPermissionOnHost(Uri uri),
は、ユーザーがリモート ホストで読み取り/書き込み権限を持ち、UNC パスが付与されているかどうかを簡単にチェックする方法です。
ヒント: 権限が付与されていない場合、よく知られている Windows ログオン ウィンドウがポップアップして、ユーザーに何らかの資格情報の入力を強制しますが、これは正常に機能しています。
ErrorClass res = PinvokeWindowsNetworking.connectToRemote(domain, null, null, true);
この質問から取得しました(提供されたコードを変更してErrorClass
、成功時に nullを返します)。
私の二次的な質問は、一般的に、私の構造が、ローカルかリモートかを問わず、有効性のためにパスをチェックする方法であるかどうかです (そのため、必要に応じてより多くのコードを提供しました)。