0

我正在编写一个小型控制台应用程序,它必须用另一个 txt 文件覆盖一个 txt 文件,但是最终执行 3 次,我认为这是因为 IO 写入过程比 IO 输出过程慢。任何人都可以帮助我如何只执行一次循环?

这是代码:

while (confirm != 'x') {
    Console.WriteLine(
        "Do you want to copy the archive to test2.txt? (y)es or e(x)it");
    confirm = (char)Console.Read();
    if (confirm == 's') {
        File.Copy("C:\\FMUArquivos\\test.txt", 
                  "C:\\FMUArquivos\\test2.txt", true);
        Console.WriteLine("\nok\n");
    }
    Console.WriteLine("\ncounter: " + counter);
    counter += 1;
}
4

3 回答 3

3

如果您点击y<enter>,那么这将为您提供 3 个字符的序列++"y"并将产生 3 次迭代,因此计数器将增加 3。请改用。<cr><lf>ReadLine

int counter = 0; 
while (true) {
    Console.WriteLine("Do you want to copy ...");
    string choice = Console.ReadLine();
    if (choice == "x") {
        break;
    }
    if (choice == "y") {
        // Copy the file
    } else {
        Console.WriteLine("Invalid choice!");
    }
    counter++;
}
于 2012-06-03T23:19:36.107 回答
1

试试这个代码:

var counter = 0;

Console.WriteLine("Do you want to copy the archive to test2.txt? (y)es or e(x)it");
var confirm = Console.ReadLine();

while (confirm != "x")
{
    File.Copy("C:\\FMUArquivos\\test.txt", "C:\\FMUArquivos\\test2.txt", true);
    Console.WriteLine("\nok\n");

    counter += 1;
    Console.WriteLine("\ncounter: " + counter);

    Console.WriteLine("Do you want to copy the archive to test2.txt? (y)es or e(x)it");
    confirm = Console.ReadLine();
}

它会询问您是否要继续,如果您按y(或除 之外x的任何其他键),它将复制文件并打印“\nok\n”和“1”。然后它会再次询问您,如果您按x,它将停止。

于 2012-06-03T23:15:57.577 回答
1

现在我已经复制并运行了您的代码,我看到了您的问题。您应该用“ReadLine”替换对“Read”的调用,并将确认类型更改为字符串并进行比较。

原因是 Console.Read 仅在您按“输入”时返回,因此它读取 3 个字符;'s' '\r', '\n' (最后 2 个是 Windows 上的换行符)。

有关 Console.Read 的 API 参考,请参见此处:http: //msdn.microsoft.com/en-us/library/system.console.read.aspx

试试这个;

string confirm = "";
int counter = 0;
while (confirm != "x")
{
    Console.WriteLine("Do you want to copy the archive to test2.txt? (y)es or e(x)it");
    confirm = Console.ReadLine();
    if (confirm == "s")
    {
        File.Copy("C:\\FMUArquivos\\test.txt",
            "C:\\FMUArquivos\\test2.txt", true);
        Console.WriteLine("\nok\n");
    }
    Console.WriteLine("\ncounter: " + counter);
    counter += 1;
}
于 2012-06-03T23:20:10.593 回答