C# 如何从StreamReader文件设置位置
好吧,事情是这样的。我试图从C# 如何从StreamReader文件设置位置,c#,console-application,C#,Console Application,好吧,事情是这样的。我试图从StreamReader文件中创建位置。我也已经尝试使用带有函数的Console.SetCursorPosition,但它只在文件文本的第一行更改。我的问题是,如何确定文件中所有行的位置。这是我的档案: N01 Chicken Nugget 20000 0 N02 Tempe Nugget 15000 0 N03 Tofu Nugget 15000 0 这是输出,它不是显示N字导致在左框隐藏。及 这是我的密码 na
StreamReader
文件中创建位置。我也已经尝试使用带有函数的Console.SetCursorPosition
,但它只在文件文本的第一行更改。我的问题是,如何确定文件中所有行的位置。这是我的档案:
N01 Chicken Nugget 20000 0
N02 Tempe Nugget 15000 0
N03 Tofu Nugget 15000 0
这是输出,它不是显示N字导致在左框隐藏。及
这是我的密码
namespace Nugget
{
class case1
{
public void cs1()
{
Console.Clear();
Console.WriteLine("╔═══════════════════════════════════════════════════════════════════════════════════════╗");
Console.WriteLine("║ProID\tProduct Name\tPrice\tStock\t\t\t\t\t\t\t║");
Console.WriteLine("╠═══════════════════════════════════════════════════════════════════════════════════════╣");
StreamReader objReader = new StreamReader(@"E:\CCIT\Semester 2\Q1\Project 1\AbsolutlyRealGetNugget\Nugget.txt");
string sLine = "";
ArrayList arrText = new ArrayList();
while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null)
arrText.Add(sLine);
}
objReader.Close();
foreach (string sOutput in arrText)
Console.WriteLine(sOutput);
Console.SetCursorPosition(0, 4);
Console.WriteLine("║");
Console.SetCursorPosition(0, 5);
Console.WriteLine("║");
Console.SetCursorPosition(0, 6);
Console.WriteLine("║");
Console.SetCursorPosition(88, 4);
Console.WriteLine("║");
Console.SetCursorPosition(88, 5);
Console.WriteLine("║");
Console.SetCursorPosition(88, 6);
Console.WriteLine("║");
Console.WriteLine("╚═══════════════════════════════════════════════════════════════════════════════════════╝\n");
}
}
}
我还尝试将Console.SetCursorPosition与函数一起使用,但是
它仅在文件文本的第一行更改
您当前的foreach
循环代码:
foreach (string sOutput in arrText)
Console.WriteLine(sOutput);
Console.SetCursorPosition(0, 4);
... more code ...
没有任何括号{
和}
,这意味着只有foreach
行下方的行被重复。要使整个块在每次迭代中重复,请插入如下括号:
foreach (string sOutput in arrText)
{
Console.WriteLine(sOutput);
Console.SetCursorPosition(0, 4);
... more code ...
}
话虽如此,我还是这样说:
static void Main(string[] args)
{
string nugget = @"C:\Users\mikes\Documents\Nugget.txt";
string[] arrText = File.ReadAllLines(nugget);
int menuWidth = 89;
string bar = new string('═', menuWidth - 2);
Console.Clear();
Console.WriteLine("╔" + bar + "╗");
Console.Write("║ProID\tProduct Name\tPrice\tStock");
Console.SetCursorPosition(menuWidth - 1, Console.CursorTop);
Console.WriteLine("║");
Console.WriteLine("╠" + bar + "╣");
foreach (string sOutput in arrText)
{
Console.Write(sOutput);
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write("║");
Console.SetCursorPosition(menuWidth - 1, Console.CursorTop);
Console.WriteLine("║");
}
Console.WriteLine("╚" + bar + "╝");
Console.WriteLine("");
Console.ReadLine();
}
请注意,我同时使用了Console.WriteLine()
和Console.Write()
。后一种方法将输出到控制台,而不使用行终止符,从而将光标留在相同的行上。然后,我们可以通过控制台将光标移动到菜单的右边缘,在同一行上。CursorTop
,并使用以下命令绘制垂直条:
Console.SetCursorPosition(menuWidth - 1, Console.CursorTop);
Console.WriteLine("║");
这产生了以下输出:
╔═══════════════════════════════════════════════════════════════════════════════════════╗
║ProID Product Name Price Stock ║
╠═══════════════════════════════════════════════════════════════════════════════════════╣
║N01 Chicken Nugget 20000 0 ║
║N02 Tempe Nugget 15000 0 ║
║N03 Tofu Nugget 15000 0 ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝
欢迎来到StackOverflow!也许只是我,但我真的不明白你在要求什么。你到底想达到什么目的?你期待什么,结果是什么?请显示您尝试的代码以及导致问题的代码。您可以查看一下,并尝试提供一个。我编辑了你的问题,以便读者可以直接看到屏幕截图,可能会对你有所帮助,但出于某种原因,你再次删除了该截图。哦,谢谢提醒,我不知道,改天当我提问时,我会描述更多细节。我已经添加了我的源代码和我的期望