1

ドット ネット コードを使用してファイルを UNIX に転送しています。ファイルを転送する UNIX パスを入力するようユーザーに求めています。ファイルを転送する前に、ユーザーが入力したパスが有効かどうかを確認したい。

 try
      {
                Process objProcess = new Process();
                objProcess.StartInfo.FileName = "putty.exe";
                objProcess.StartInfo.Arguments = txtUserName.Text.Trim() + "@" + cmbIP.Text.Trim() + " -pw " + txtPassword.Text.Trim() + " -m \"" + CodeSetFileNameTemp + "\"";
                objProcess.Start();

                objProcess.WaitForExit();

                SUCCEEDED.AppendLine(viewName);
                SELECTED.Remove(SELECTED.ToString().IndexOf(viewName), viewName.Length + 2);


            }
            catch (Exception ex)
            {
                FAILED.AppendLine(viewName);
                SELECTED.Remove(SELECTED.ToString().IndexOf(viewName), viewName.Length + 2);
                MessageBox.Show(ex.Message + ". Unable to connect UNIX", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
4

4 に答える 4

1

ファイルを転送するだけです。問題がある場合は、何らかのエラーが発生します。このような転送が失敗する理由はいくつもあります (ネットワークの問題、パスの誤り、権限の誤り、スペース不足など)。パスを検証できたとしても、検証と試行された転送の間で状況が変わらないという保証はありません。

これは、有効な電子メール アドレスの正規表現を必要としている人に似ていますが、背後に電子メール アカウントがないという理由だけで、正しい形式のアドレスでさえ無効である可能性があることに気づいていないようです。

UNIX では、バックスペースやその他の制御文字などの凶悪なものも含めて、パス名に非常に幅広い文字を使用できます。私はそれらすべてを自分で使用するつもりはありませんが、それら有効です。

したがって、結論として、ターゲットの場所が使用できるかどうかを確認する最善の方法は、希望する方法で使用することです。


エラー検出が利用できないというあなたのコメントに基づいて、最善のアプローチはファイルを送信してから別のファイルに読み戻すことだと思います。

これが、ファイルが完全かつ正確に配信されたことを確認できる唯一の方法です。頭に浮かぶ他のすべてのオプション (単に有効なパスをチェックすることを含む) には、いくらかの不確実性が残ります。

たとえば、/home/paxUNIX では本当に有効なパスですが、ターゲット ボックスには存在しない場合もあります。存在する場合でも、転送が途中で失敗する可能性があり、ファイルを元に戻して元のファイルと比較しない限り、その兆候はありません。

于 2012-08-07T06:26:43.250 に答える
1

Directory.Existsを使用できます。

入力したディレクトリが実際に存在するかどうかがわかります。それを超えて、他のこと (パーミッション) はまだうまくいかない可能性があります。

于 2012-08-07T06:26:56.587 に答える
1

ファイルを Unix サーバーに転送するためにどのような方法を使用していますか? Samba を使用してネットワーク ドライブとしてマウントしている場合は、System.IO.Directory.Existsを使用して、パスが有効かどうかを判断できます。FTP のようなものである場合は、ディレクトリを一覧表示して、そこにないという例外をキャッチできます。

于 2012-08-07T06:27:12.937 に答える
0

これを使用できるよりも、ユーザーからディレクトリパスを取得していると思います

Directory.Exists(path);

指定されたパスの存在を示すブール値フラグを返します。

于 2012-08-07T06:26:33.590 に答える