试图打开文件,格式错误?

Jas*_*n94 1 c#

我试图打开一个文件.这是我的输出(我在try/catch中构建的字符串):

打开c:\ Program Files(x86)\ MyApp\storedUsers.txt - > System.FormatException - >输入字符串格式不正确时出错.

以下是如何打开它:

installPath = @"C:\Program Files (x86)\MyApp\";
FileStream userFile = new FileStream(installPath + "storedUsers.txt", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader userStream = new StreamReader(userFile);
while (userStream.Peek() >= 0)
{
string line = userStream.ReadLine();
storedUsers.Add(line.Split(',')[0], int.Parse(line.Split(',')[0]));
}
userStream.Close();
Run Code Online (Sandbox Code Playgroud)

我的抓到:

WriteToLogFile("Error opening " + installPath + "storedUsers.txt -> " + ex.GetType() + " -> " + ex.Message);
Run Code Online (Sandbox Code Playgroud)

我无法绕过什么错误...

ang*_*son 5

我打算在这里做出猜测,因为你没有给我们足够的答案给你一个坚实的答案.

我打赌问题是解析该行部分,这个表达式:

int.Parse(line.Split(',')[0])
Run Code Online (Sandbox Code Playgroud)

在所有情况下,这实际上并没有给你一个数字.

所以你应该查看该文件,并可能将代码更改为:

string[] parts = line.Split(',');
... int.Parse(parts[0]) ...
Run Code Online (Sandbox Code Playgroud)

然后,您可以检查该数组的内容,以查看第一列中的内容.

正如评论中所指出的,更好的方法是不要盲目地假设解析会成功,另外你可能想要确保你使用正确的文化信息.

这是我要做的,假设数字由程序输出,用于读入另一个程序:

int value;
if (Int32.TryParse(parts[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out value))
    ... your code here, use value where you need it
else
    what to do in the case of unable to parse the string as a number
Run Code Online (Sandbox Code Playgroud)

预感,你需要修剪内容吗?试试这个简单的改变:

... int.Parse(line.Split(',')[0].Trim()) ...
                                ^--+--^
                                   |
                                   +-- add this
Run Code Online (Sandbox Code Playgroud)

其他提示:

最终版本:

installPath = @"C:\Program Files (x86)\MyApp\";
using (FileStream userFile = new FileStream(
    Path.Combine(installPath, "storedUsers.txt"),
    FileMode.OpenOrCreate, FileAccess.Read))
using (StreamReader userStream = new StreamReader(userFile))
{
    string line;
    while ((line = userStream.ReadLine()) != null)
    {
        string[] parts = line.Split(',');
        int userId;
        if (Int32.TryParse(parts[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out userId))
            storedUsers.Add(userId);
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,如果文件不是太大,你可以用一点LINQ重写整个shebang:

// warning, LINQ with side-effects, evaluate here, don't use it lazily
int tempUserId = 0;
List<int> userIds = File
    .ReadAllLines(Path.Combine(installPath, "storedUsers.txt"))
    .Select(l => l.Split(',')[0])
    .Where(p0 => Int32.TryParse(p0, NumberStyles.Integer, CultureInfo.InvariantCulture, out tempUserId))
    .Select(dummy => tempUserId)
    .ToList();
Run Code Online (Sandbox Code Playgroud)