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/pax在 UNIX 下确实是一条有效路径,但目标框上甚至可能不存在。即使它确实存在,传输也可能在中途失败,您将没有任何迹象,除非您带回文件并将其与原始文件进行比较。

于 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 回答