0

好的,所以我现在正在处理一些 if/else 语句。但是,我遇到了一些麻烦。

这是取决于单击的版本的完整代码。

private void button_Click(object sender, EventArgs e)
{
    using (OpenFileDialog file = new OpenFileDialog())
    {
        file.Filter = "File(*.file)|*.jar|All Files (*.*)|*.*";
        file.Title = "Open File...";
        if (file.ShowDialog() == DialogResult.OK)
        {
            string fullFileName = item.FileName;
            FileInfo userSelected = new FileInfo(fullFileName);
            string fileNameWithExt = Path.GetFileName(fullFileName);
            string destPath = Path.Combine(Application.UserAppDataPath, fileNameWithExt);
            string mcAD = Environment.ExpandEnvironmentVariables("%AppData%");
            File.Copy(item.FileName, mcAD, true);
        }
    }

但我遇到的麻烦是这个。下面是代码,但这是程序的布局方式。程序底部有一个菜单。单击它的名称为“版本”,您可以选择版本 1.0、2.0 和 3.0。我已经设置好了,所以它旁边有文字告诉它你选择了哪个版本。现在,问题是我需要针对上述代码的所有版本的 if/else 语句,因为每个版本的所有文件都转到不同的位置。

这是另一个代码...

private void Version_1_0_Click(object sender, EventArgs e)
{
    string Version_1_0_Selected = VersionText.Text = "1.0 Selected";
}

private void Version_1_6_1_Click(object sender, EventArgs e)
{
    string Version_2_0_Selected = VersionText.Text = "2.0 Selected";
}

private void Version_3_0_Click(object sender, EventArgs e)
{
    string Version_3_0_Selected = VersionText.Text = "3.0 Selected";
}
4

2 回答 2

1

将 FileDialog 代码抽象为一个单独的方法并传入您的版本字符串,以便您可以执行检查。

public void OpenVersionDialog(string version)
{
     string mcAD = GetCopyPath(version);
     if(!String.IsNullOrEmpty(mcAD))
     {
        using (OpenFileDialog file = new OpenFileDialog())
        {
            file.Filter = "File(*.file)|*.jar|All Files (*.*)|*.*";
            file.Title = "Open File...";
            if (file.ShowDialog() == DialogResult.OK)
            {
               string fullFileName = item.FileName;
               FileInfo userSelected = new FileInfo(fullFileName);
               string fileNameWithExt = Path.GetFileName(fullFileName);
               string destPath = Path.Combine(Application.UserAppDataPath, fileNameWithExt);


               File.Copy(item.FileName, mcAD, true);
            }
        }
     }
     else
     {
        //invalid version selected
     } 
}


public string GetCopyPath(string versionInput)
{
   //these are case-insensitive checks but you can change that if you want case-sensitive
   if(string.Equals(versionInput, "1.0 Selected", StringComparison.OrdinalIgnoreCase))
      return "YOUR_PATH_FOR 1.0";

  if(string.Equals(versionInput, "2.0 Selected", StringComparison.OrdinalIgnoreCase))
      return "YOUR_PATH_FOR 2.0";

   if(string.Equals(versionInput, "3.0 Selected", StringComparison.OrdinalIgnoreCase))
      return "YOUR_PATH_FOR 3.0";

   return String.Empty;
}

如果我理解正确,那应该是您想要的。如果您有更多版本,则可以将它们存储在字典中,其中键是版本,值是文件应复制到的路径。

我不确定mcAD和之间的区别destPath是什么,但我假设mcAD变量会根据File.Copy.

于 2013-07-31T01:21:23.943 回答
1

您可以使用 Control.Tag 来存储版本索引。例如:

private void Version_1_0_Click(object sender, EventArgs e)
{
  VersionText.Text = "1.0 Selected";
  VersionText.Tag= 1;
}

然后,您可以定义目标路径:

string[] paths = {@"c:\path1.txt", @"c:\path2.txt", @"c:\path3.txt"};

最后,当您编写文件时,您可以像这样查找路径:

File.Copy(item.FileName, paths[VersionText.Tag], true);

如果目标文件名基于源文件名,您可能需要修改此代码,但这应该不难。

于 2013-07-31T01:28:21.513 回答