我收到“FormatException:输入字符串格式不正确”错误,我不明白。
我正在使用以下行将字符串写入文本文件:
using (StreamWriter sw = new StreamWriter(myfilename, false, System.Text.Encoding.GetEncoding(enc)))
{
sw.Write(mystring, Environment.NewLine);
}
(编码部分是因为我的应用程序中有一个选项可以将其设置为utf-8或iso-8859-1 ...但我认为这是无关紧要的。)
我的所有字符串都写得很好,除了这个字符串与其他字符串不同,因为它实际上有一段javascript代码。我确定其中一个特殊字符可能会导致问题,但我怎么知道?
我尝试过的一件事就是在上面的sw.Write语句之前插入以下行:
System.Console.WriteLine(mystring);
它写到控制台就好了 - 没有错误。
帮助?
谢谢! (和新年快乐!)
-Adeena
答案 0 :(得分:11)
您正在使用的重载将格式作为第一个参数,然后将对象注入。
您可以执行以下任一操作:
sw.Write(mystring + Environment.NewLine);
或
sw.Write("{0}{1}", mystring, Environment.NewLine);
答案 1 :(得分:0)
在回应DK的评论时,我测试了什么扩展字符串连接更慢。我用三个选项做了这个设置;
sw.Write
sw.WriteLine
在我的机器上,第二个选项比平均值快约88%。在10000000次迭代时,它们使用3517,2420和3385毫秒。
如果这是在程序中多次调用的代码,那么它应该是重要的。
using System;
using System.IO;
using System.Text;
class Program
{
static void Main(string[] args)
{
const string myString = "kdhlkhldhcøehdhkjehdkhekdhk";
int iterations=getIntFromParams(args, 0, 10);
int method = getIntFromParams(args, 1, 0);
var fileName=Path.GetTempFileName();
using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.Default))
{
switch (method)
{
case 0:
Console.WriteLine("Starting method with concatenation. Iterations: " + iterations);
var start0 = DateTimeOffset.Now;
for (int i = 0; i < iterations; i++)
{
sw.Write(myString + Environment.NewLine);
}
var time0 = DateTimeOffset.Now - start0;
Console.WriteLine("End at " + time0.TotalMilliseconds + " ms.");
break;
case 1:
Console.WriteLine("Starting method without concatenation. Iterations: " + iterations);
var start1 = DateTimeOffset.Now;
for (int i = 0; i < iterations; i++)
{
sw.Write(myString);
sw.Write(Environment.NewLine);
}
var time1 = DateTimeOffset.Now - start1;
Console.WriteLine("End at " + time1.TotalMilliseconds + " ms.");
break;
case 2:
Console.WriteLine("Starting method without concatenation, using WriteLine. Iterations: " + iterations);
var start2 = DateTimeOffset.Now;
for (int i = 0; i < iterations; i++)
{
sw.WriteLine(myString);
}
var time2 = DateTimeOffset.Now - start2;
Console.WriteLine("End at " + time2.TotalMilliseconds + " ms.");
break;
}
}
}
private static int getIntFromParams(string[] args, int index, int @default)
{
int value;
try
{
if (!int.TryParse(args[index], out value))
{
value = @default;
}
}
catch(IndexOutOfRangeException)
{
value = @default;
}
return value;
}
}