我有一些奇怪的问题(对我而言).
有一个应用程序是Windows窗体应用程序"firstapp.exe".还有另一个应用程序,也是Windows窗体应用程序"launcher.exe".并且有一个名为"server.exe"的控制台应用程序.
firstapp和启动器都在同一目录中.在该目录中还有一个"Config"文件夹,其中包含一些其他文件.
我用来从firstapp的config文件夹中读取一个文件的代码:
StreamReader reader = new StreamReader("Config\\launcher.txt");
string readed_config = reader.ReadToEnd();
reader.Close();
Run Code Online (Sandbox Code Playgroud)
如果我使用启动器(使用process.start)运行firstapp应用程序,一切都很顺利.当我使用控制台应用程序运行它时,它与firstapp不在同一目录中,我从代码部分(上面发布)中获取"目录未找到异常".
我该如何解决这个问题?为什么控制台应用程序将自己的路径添加到应该独立运行的另一个应用程
我有一个托管的文本文件,这个文件有一个有组织的字符串,如下所示:
我从以下函数获取此文件的所有内容:
private static List<string> lines;
private static string DownloadLines(string hostUrl)
{
var strContent = "";
var webRequest = WebRequest.Create(hostUrl);
using (var response = webRequest.GetResponse())
using (var content = response.GetResponseStream())
using (var reader = new StreamReader(content))
{
strContent = reader.ReadToEnd();
}
lines = new List<string>();
lines.Add(strContent);
return strContent;
}
// Button_click
DownloadLines("http://address.com/folder/file.txt");
for (int i = 0; i < lines.Count; i++)
{
lineAux = lines[0].ToString();
break;
}
Console.WriteLine(lineAux);
Run Code Online (Sandbox Code Playgroud)
然后,我如何访问这个方法返回的这个大型有组织字符串中的第一个索引,如文本?
我正在制作一个服务器 - 使用TcpClient和服务器的客户端程序。
要从我使用的服务器发送:
static void send(string data)
{
sw.WriteLine(data + Environment.NewLine);
}
Run Code Online (Sandbox Code Playgroud)
当客户端连接时,我正在发送一些文本:
client = listener.AcceptTcpClient();
sr = new StreamReader(client.GetStream());
sw = new StreamWriter(client.GetStream());
string line;
try
{
send("Hello world");
} //More code
Run Code Online (Sandbox Code Playgroud)
并从客户端读取:
string data;
data = sr.ReadLine();
if(data != string.Empty || data != null)
{
MessageBox.Show(data);
}
Run Code Online (Sandbox Code Playgroud)
我尝试放入 while(true) 并冻结,我尝试放入计时器滴答循环并冻结...
我该如何解决?
PS:客户端和服务器是2个不同的项目。
我目前正在使用 Azure 中继服务,但在处理流时遇到了问题。我需要以同步方式使用此服务,因为将使用此实现的软件需要它。
我正在向服务打开一个流并使用 从中读取数据StreamReader(),工作正常。但是现在我必须离开StreamReader而不关闭底层流,因为我必须将答案发送回发件人。
问题是,我不能在StreamReader()不关闭基础流的情况下离开,并且不可能重新打开流以发回答案。
任何想法如何解决这个问题?
谢谢你的帮助。
我正在尝试使用 CsvHelper 读取 CSV 文件并从中创建数据表。第一行将是提供列名的标题记录,但除此之外,文件的结构是未知的。如果我使用以下代码(取自 CsvHelper 的作者的示例),它就可以工作。
using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader))
{
// Do any configuration to `CsvReader` before creating CsvDataReader.
using (var dr = new CsvDataReader(csv))
{
var dt = new DataTable();
dt.Load(dr);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我为 StreamReader 使用备用构造函数,该构造函数将 Stream 作为参数而不是文件路径,那么 CsvDataReader 的创建将失败并显示“不支持同步读取”的错误消息。
我尝试了 CsvHelper 的其他一些方法来尝试以不同的方式处理数据,但是每当通过传入 Stream 而不是文件路径来创建 StreamReader 时,我都会遇到相同的错误。我开始怀疑真正的问题在于 StreamReader 的实现还是 CsvHelper。在我的情况下(Blazor Server 应用程序),传入 Stream 更有意义。有任何想法吗?
编辑:
我相信 David Specht 是正确的,因为我使用的特定流有一些独特之处。在进一步的测试中,我发现一些字符串确实有效。在出现错误的情况下,我使用 IFileListEntry.Data 流接口从 Steve Sanderson 的 BlazorInputFile 组件(在 GitHub …
我想在文本文件中搜索包含“Performance Stats:”的行,然后打印接下来的 20 行左右,因为它们是性能统计表。我正在使用 Streamreader。
string pathToFile = "\\host\c$\temp\logs\myPerformanceFile.txt"
using (var filestream = new FileStream(pathToFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var streamReader = new StreamReader(filestream, Encoding.Default))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (line.Contains("Performance Stats:"))
{
Console.WriteLine(line)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图找到每个统计数据的标题栏。但 20 行看起来有点混乱,例如,我正在使用相同的搜索参数解析文件中有 5 个表。但我只想要其中一个表中的数据。
if (line.Contains("Timings:"))
{
Console.WriteLine(line)
}
if (line.Contains("Downloads:"))
{
Console.WriteLine(line)
}
if (line.Contains("Reset"))
{
Console.WriteLine(line)
}
Run Code Online (Sandbox Code Playgroud) 这是我解决的程序,它将读取带有分隔符的文本文件,并使用datagridview将数据传输到表中.
现在我很难过,因为while循环只读取每一行.
这是我的代码:
private void Form1_Load(object sender, EventArgs e)
{
TextReader tr = new StreamReader("aplusixdata.txt");
string[] columns = {"School","Room No.","Student No.","Excercise No.","Problem No.",
"Nth Problem Taken","Date","Time","Excercise Degree",
"Action No.","Duration","Action","Error","Etape",
"Expression","Etat","Cursor Location","Selection",
"Equivalence","Resolution","Empty"};
while (tr.ReadLine() != null)
{
int i = 0;
char[] delimiterChar = { ';' };
string words = tr.ReadLine();
text = words.Split(delimiterChar);
DataRow row = t.NewRow();
foreach (String data in text)
{
//System.Console.WriteLine(data);
System.Console.WriteLine(i);
row[columns[i]] = data;
i++;
}
t.Rows.Add(row);
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在寻找大约一个小时,根本无法找到任何解决方案.我希望我的.txt文件中的每一行都添加到我的列表中,只要它以相同的数字开头即可.问题在于"line.Substring(0,1)",我不知道如何解决它.也许你明白我想要实现的目标.
using (StreamReader file = new StreamReader(schedulePathDays))
{
string line;
while ((line.Substring(0, 1) = file.ReadLine()) == thisDay.ToString())
{
exercisesRow.Add(line);
}
}
Run Code Online (Sandbox Code Playgroud) 有没有一个原因Eclipse给我以下资源泄漏警告:资源泄漏:'br'永远不会关闭"?我正在谈论的代码是在这篇文章的底部.
我以为我的最后一块都被覆盖了,我的理由是:
那我错过了什么?或者这可能是一个日食错误?
亲切的问候!
S.
public static String fileToString(String fileName, String encoding) throws IOException {
InputStream is;
InputStreamReader isr;
BufferedReader br;
Closeable res = null;
try {
is = new FileInputStream(fileName);
res = is;
isr = new InputStreamReader(is, encoding);
res = isr;
br = new BufferedReader(isr);
res = br;
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
builder.append(line);
builder.append(LS);
}
return builder.toString();
} finally {
if (res …Run Code Online (Sandbox Code Playgroud) 我有我在.txt文件中读取的代码.文本文件包含名字和姓氏的值以及数字.
"丹尼尔""默罗""1234"
我正在尝试使用StreamWriter编辑特定值.但是,我现在的代码编辑整个.txt文件并替换所有内容.我只想替换我的案例中的数字值.
static classMates[] readClassMates(classMates[] classMateInfo)
{
StreamReader sr = new StreamReader(@"C:\Users\Callum\Documents\class.txt");
int count = 0;
while (!sr.EndOfStream)
{
classMateInfo[count].first = sr.ReadLine();
classMateInfo[count].last = sr.ReadLine();
string idTemp = sr.ReadLine();
classMateInfo[count].ID = Convert.ToInt32(idTemp);
count++;
}
sr.Close();
return classMateInfo;
static void editClassMates(classMates[] classMateInfo)
{
Console.Write("Who's number would you like to change? ");
string classMateInput = Console.ReadLine();
for (int i = 0; i < classMateInfo.Length; i++)
{
if (classMateInfo[i].last.Equals(classMateInput))
{
Console.Write("Enter new number: ");
string temp = Console.ReadLine();
int classMateNumber = Convert.ToInt32(temp); …Run Code Online (Sandbox Code Playgroud) streamreader ×10
c# ×8
text ×2
.net ×1
azure ×1
blazor ×1
csv ×1
csvhelper ×1
eclipse ×1
java ×1
list ×1
stream ×1
streamwriter ×1
tcpclient ×1
while-loop ×1