【问题标题】:No overload for method move方法移动没有重载
【发布时间】:2016-09-27 07:32:27
【问题描述】:

所以基本上,我有一个从用户在文本框中输入开始的过程。 但是该过程中的一个参数包含用户拥有但已重命名的文件夹。只有在它被重命名后,它才会开始这个过程。所以我得到了。

    private void button2_Click_1(object sender, EventArgs e)
    {
        if (File.Exists(@"{0}\@JonzieMegaModPack"))
        {
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = textBox1.Text;
            startInfo.Arguments =
                string.Format(@"-window -useBE {1} -mod={0}\@CBA_A3", textBox2.Text, textBox3);
            Process.Start(startInfo);
        }
        else
        {
            Directory.Move(@"{0}\@Jonzie Mega Mod Pack", @"{0}\@JonzieMegaModPack", textBox2.Text);
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = textBox1.Text;
            startInfo.Arguments =
                string.Format(@"-window -useBE {1} -mod={0}\@CBA_A3", textBox2.Text, textBox3);
            Process.Start(startInfo);
        }
    }

但是在else 部分,带有Directory.Move 我收到错误消息:方法 'Move' 没有重载需要 3 个参数。 我猜是因为 {0} 结束时的逗号。

【问题讨论】:

  • 嗯,是的,Directory.Move 没有重载三个参数。你期望那个电话会做什么?您希望它如何使用所有三个参数?也许你的意思是打电话给string.Format? (看起来很可能,因为我怀疑您实际上有一个名为 {0} 的目录。)
  • {0} 用于string.Format()。也许你的代码中缺少它。
  • {0} 是目录的开头。对我来说,它的 e:\Aaron\Addons 然后继续 {0} 后面的内容。那么 , textbox2.text 应该会导致 {0} 不应该吗?
  • @AaronKek:不,绝对不是。您不能只在这样的任意方法调用中使用字符串格式。像Console.WriteLine 这样的方法显式地 支持字符串格式——它不仅仅是在每次调用中都隐含。

标签: c# process system move


【解决方案1】:

是的,您正在调用Directory.Move,它只有一个重载,带有两个字符串参数。目前尚不清楚您为什么/如何期望它起作用。

我怀疑你错过了对 string.Format 的呼叫,例如

string source = string.Format(@"{0}\@Jonzie Mega Mod Pack", textBox2.Text);
string destination = string.Format(@"{0}\@JonzieMegaModPack", textBox2.Text);
Directory.Move(source, destination);

或者在 C# 6 中你可以使用字符串插值:

string source = $@"{textBox2.Text}\@Jonzie Mega Mod Pack";
string destination = $@"{textBox2.Text}\@JonzieMegaModPack";
Directory.Move(source, destination);

不过,我建议使用 Path.Combine

string source = Path.Combine(textBox2.Text, "@Jonzie Mega Mod Pack");
string destination = Path.Combine(textBox2.Text, "@JonzieMegaModPack");
Directory.Move(source, destination);

【讨论】:

  • 是的,目录中确实有@符号。 @ 表示它是一个游戏的模组包。
  • @AaronKek:好的,将删除最后一点。
  • 我很确定这可行,但现在当我单击按钮时,它似乎跳过了 if 部分。它直接去别的地方?
  • @AaronKek:嗯,是的,你也遇到了同样的问题——你真的希望存在一个名为"{0}\@JonzieMegaModPack" 的目录吗?不 - 你需要 string.FormatPath.Combine 再次。基本上,您需要停止假设字符串格式将在任何地方隐式发生。 (在这种情况下,您甚至没有提供一个值来替换 {0}...)
  • 是的,我刚刚注意到了。您认为您也可以将 string.Format 代码放入您的答案中吗?我想在那之后我应该明白了。
【解决方案2】:

这个方法只有一个签名Directory.Move(string, string)

你试图用 3 个参数调用它......签名不存在。看看HERE

我认为您正在尝试将您的参数之一作为 string.Format(),而您还没有说清楚...也许您正在使用 ReSharper?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多