如何在NamedPipe上发送带有空行的多行字符串?
如果我发一个字符串
string text= @"line 1
line2
line four
";
StreamWriter sw = new StreamWriter(client);
sw.Write(text);
Run Code Online (Sandbox Code Playgroud)
我只在服务器端"第1行":
StreamReader sr = new StreamReader(server);
string message = sr.ReadLine();
Run Code Online (Sandbox Code Playgroud)
当我尝试这样的事情
StringBuilder message = new StringBuilder();
string line;
while ((line = sr.ReadLine()) != null)
{
message.Append(line + Environment.NewLine);
}
Run Code Online (Sandbox Code Playgroud)
它在客户端连接时挂起,只在客户端断开连接时才会释放.
任何想法我怎么能没有挂在这个循环中得到整个字符串?我需要处理字符串并以相同的方式将其返回给客户端.
保持字符串的原始格式包括空行和空格非常重要.
我需要一些指导.
我正在使用StreamReader读取excel文件,然后使用StreamReader.ReadToEnd()将文件转换为字符串 ; 方法.然后我使用StreamWriter.Write()方法将字符串写入文件系统上的其他位置.
然后我从我之前写的位置重新读取文件.但是,我似乎正在阅读一些垃圾值,我无法从新位置打开excel文件...
我在这里做错了文件被破坏了吗?我在这里错过了与编码有关的事吗?
我正在读取和写入一些文本文件,并且当前正在使用设定路径。如何更改该设置路径以使用可执行文件所在的同一文件夹?
例如:
File.ReadLines(@"D:\Users\MyUserName\Desktop\MyApplication\names.txt").Skip(1).ToList();
Run Code Online (Sandbox Code Playgroud)
和...
File.WriteAllLines(@"D:\Users\MyUserName\Desktop\MyApplication\names.txt", lines);
Run Code Online (Sandbox Code Playgroud)
和...
using (StreamWriter writer = new StreamWriter(@"D:\Users\MyUserName\Desktop\MyApplication\names.txt", true))
{
writer.WriteLine(myText);
}
Run Code Online (Sandbox Code Playgroud)
在 IDE (Visual Studio) 中测试时它也需要工作。
我正在使用以下代码将文件写入桌面。
string submittedFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
int i = 0;
StreamWriter sw = null;
sw = new StreamWriter(submittedFilePath, false);
for (i = 0; i < PSOLib.table.Columns.Count - 1; i++)
{
sw.Write(PSOLib.table.Columns[i].ColumnName + ";");
}
sw.Write(PSOLib.table.Columns[i].ColumnName);
sw.WriteLine();
foreach (DataRow row in PSOLib.table.Rows)
{
object[] array = row.ItemArray;
for (i = 0; i < array.Length - 1; i++)
{
sw.Write(array[i].ToString() + ";");
}
sw.Write(array[i].ToString());
sw.WriteLine();
}
sw.Close();
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试调用该方法时,我都会得到:
Access to the path 'C:\\Users\\User\\Desktop' is denied.
System.UnauthorizedAccessException.
Run Code Online (Sandbox Code Playgroud) //C#
using (System.IO.StreamWriter writer =
new System.IO.StreamWriter("me00.txt", true))
{
writer.WriteLine("Hey"); //saved
}
System.IO.StreamWriter writer02 = new System.IO.StreamWriter("me01.txt", true);
writer02.WriteLine("Now hey x2"); //not saved
Run Code Online (Sandbox Code Playgroud)
创建了文件me00.txt和me01.txt,但只保存了第一个文件的内容.
me00.txt会排队嘿.me01.txt将是一个空的txt文件; "现在嘿x2"没有保存.
关键词"使用"做了什么来引起这种观察?
MemoryStream我正在使用和将对象导出到 csv StreamWriter。但保存文件后,我发现文件末尾丢失了。它在一条线的中间被切断。
下面是我的代码:
public void Export(ProductExport productExport)
{
var country = (Country)(int.Parse(productExport.Firma.Code));
using(var stream = new MemoryStream())
{
var sw = new StreamWriter(stream);
// Write header row
sw.WriteLine(
"{0};{1};{2};{3};{4};{5};{6};{7};{8};{9}",
"Groep",
"TecDoc Leverancier",
"TecDoc Ref",
"SA",
"EAN",
"Omschrijving NL",
"V/E",
"VPE",
"Prijs per",
"Bruto prijs"
);
foreach(var product in productExport.Products)
{
// Write header row
sw.WriteLine(
"{0};{1};{2};{3};{4};{5};{6};{7};{8};{9}",
product.Artgrp,
product.TecDoc != null ? product.TecDoc.Supplier : "",
product.TecDoc != null ? product.TecDoc.Value : "",
product.Ids.Where<Id>(i => i.Type == "SA").Select(i => …Run Code Online (Sandbox Code Playgroud) 我有一个 CSV 文件,某些列中有很多尾随空格,因此我尝试编写一个简单的 Windows 窗体应用程序,该应用程序循环遍历 CSV 中的所有行并删除尾随空格。我认为我还很远,但我有一种感觉,C# 将其视为一行:
"Lorem ipsum dolor sit amet","Default ",9999,1,"base "
Run Code Online (Sandbox Code Playgroud)
虽然它应该将其视为一行:
"Lorem ipsum dolor sit amet"
Run Code Online (Sandbox Code Playgroud)
这是我现在的代码:
String path = @"C:\Users\me\Documents\test.csv";
string[] allLines = File.ReadAllLines(path);
using (StreamWriter sw = new StreamWriter(path))
{
foreach (string line in allLines)
{
if (!string.IsNullOrEmpty(line) && line.Length > 1)
{
line.TrimEnd(' ');
sw.WriteLine(line);
//sw.WriteLine(line.TrimEnd(' '));
}
}
}
Console.WriteLine(allLines);
Console.WriteLine("Done");
Run Code Online (Sandbox Code Playgroud)
我如何确保我的 CSV 文件是这样的:
"Lorem ipsum dolor sit amet ","Default ",9999,1,"base "
"simple","Default ",9999,1," base"
"test ","Default ",9999,1,"base"
Run Code Online (Sandbox Code Playgroud)
运行如下 C# 代码后会出现(因此末尾和开头没有空格): …
简单的问题因为我太愚蠢了.我正在使用streamreader和writer,它给了我一个例外,即该文件已被另一个进程使用.我知道我必须设置一个.dispose()地方.但我真的不知道在哪里.我太盲目了.
这是我的代码:
protected void btn_Geht_Click(object sender, EventArgs e)
{
string sPath = @"C:\VSTO\Projects\Zeiterfassung\Zeiterfassung\obj\Debug\Zeiten.txt";
cZeile Geht = new cZeile();
using (StreamReader sr = new StreamReader(sPath))
{
Geht = cZeiterfassung.GetZeileObjectFromZeileString(sr.ReadLine(), ";");
Geht.Geht = DateTime.Now.ToString("hh:mm");
Geht.dtGeht = DateTime.Now;
sr.Dispose();
using (StreamWriter sw = new StreamWriter(sPath))
{
File.WriteAllText(sPath, string.Format("{0:yyyyMMdd_hhmm};{1};{2:dd.MM.yyyy};{3:hh:mm};{4:hh:mm}", Geht.ID, Geht.User, Geht.Datum, Geht.Kommt, Geht.Geht));
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到错误:
File.WriteAllText(sPath, string.Format("{0:yyyyMMdd_hhmm};{1};{2:dd.MM.yyyy};{3:hh:mm};{4:hh:mm}", Geht.ID, Geht.User, Geht.Datum, Geht.Kommt, Geht.Geht));
进程无法访问该文件,因为它正由另一个进程使用
我正在尝试使旧方法异步。
它从数据库中获取 BLOB 并将其作为文件写入磁盘。
但是,没有异步版本的BinaryWriter.
我可以用StreamWriter代替吗?因为它有WriteAsync方法。有什么区别?有什么缺点吗?
部分代码:
OracleParameter returnParam = new OracleParameter("blob", OracleDbType.Blob);
command.Parameters.Add(returnParam);
await command.ExecuteNonQueryAsync();
OracleBlob blob = returnParam.Value as OracleBlob;
byte[] data = new byte[blob.Length];
await blob.ReadAsync(data, 0, Convert.ToInt32(blob.Length));
fileFullPath = Path.Combine(folder, fileName);
using (FileStream fs = new FileStream(fileFullPath, FileMode.OpenOrCreate, FileAccess.Write))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write(data); //NO ASYNC METHOD HERE
logger.Debug("Finished writing file {0} to disk", fileFullPath);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以改成下面这样吗?
OracleParameter returnParam = new OracleParameter("blob", OracleDbType.Blob);
command.Parameters.Add(returnParam);
await …Run Code Online (Sandbox Code Playgroud) 我的代码是:
StreamReader r = new StreamReader("temp.txt");
string str = r.ReadLine();
Console.WriteLine(str);
StreamWriter w = new StreamWriter("temp.txt");
w.WriteLine("new text");
str = r.ReadLine();
Console.WriteLine(str);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它抛出一个未处理的异常并且无法访问该文件。我确定文件的路径是正确的,并且没有写保护。
c# ×10
streamwriter ×10
streamreader ×5
.net ×2
asp.net ×1
async-await ×1
binary-data ×1
csv ×1
dispose ×1
excel ×1
exception ×1
file ×1
filepath ×1
memorystream ×1
named-pipes ×1
text ×1
trim ×1
using ×1