C# 如何循环文件以获取数据?

C# 如何循环文件以获取数据?,c#,serialization,foreach,binaryformatter,binary-serialization,C#,Serialization,Foreach,Binaryformatter,Binary Serialization,我正在尝试进行基本登录并注册c#console应用程序,但是,我需要在文件中循环,以查看用户在登录时输入的用户名和密码是否匹配。如果用户输入用户名和密码,我希望我的代码通过我的文件检查它是否是现有的用户名和密码 这是我的密码: [可序列化] 公共类用户 { 公共字符串用户名; 公共字符串密码; 公共用户(字符串用户名、字符串密码) { 用户名=用户名; 密码=密码; } } 公共类保存文件 { 公共静态注册详细信息(字符串用户名、字符串密码) { Users obj=新用户(用户名、密码); I

我正在尝试进行基本登录并注册c#console应用程序,但是,我需要在文件中循环,以查看用户在登录时输入的用户名和密码是否匹配。如果用户输入用户名和密码,我希望我的代码通过我的文件检查它是否是现有的用户名和密码

这是我的密码:

[可序列化]
公共类用户
{
公共字符串用户名;
公共字符串密码;
公共用户(字符串用户名、字符串密码)
{
用户名=用户名;
密码=密码;
}
}
公共类保存文件
{
公共静态注册详细信息(字符串用户名、字符串密码)
{
Users obj=新用户(用户名、密码);
IFormatter formatter=新的BinaryFormatter();
Stream=新文件流(“SignUp.txt”,FileMode.Append,FileAccess.Write);
序列化(流,obj);
stream.Close();
}
公共静态用户反序列化SignupDetails()
{
Stream=新文件流(“SignUp.txt”,FileMode.Open,FileAccess.Read);
IFormatter formatter=新的BinaryFormatter();
Users objnew=(Users)格式化程序。反序列化(流);
stream.Close();
返回objnew;
}
}
公共静态void Main(字符串[]args)
{
WriteLine(“登录类型1,创建新帐户类型2”);
国际物流注册;
做
{
int.TryParse(Console.ReadLine(),out LogInOrSignUp);
}while(LogInOrSignUp!=1&&LogInOrSignUp!=2);
字符串userName=“”;
字符串密码=”;
bool successfull=false;
Users userDetails=SaveToFile.DeserializeSignUpDetails();
而(!成功)
{
如果(LogInOrSignUp==1)
{
Console.WriteLine(“写下您的用户名:”);
userName=Console.ReadLine();
Console.WriteLine(“输入密码:”);
password=Console.ReadLine();
if(userName==userDetails.userName&&password==userDetails.password)
{
WriteLine(“您已成功登录!”);
成功=正确;
打破
}
如果(!成功)
{
WriteLine(“您的用户名或密码不正确,请重试!”);
}
}
else if(LogInOrSignUp==2)
{
Console.WriteLine(“输入用户名:”);
userName=Console.ReadLine();
Console.WriteLine(“输入密码:”);
password=Console.ReadLine();
成功=正确;
SaveToFile.SerializeSignUpDetails(用户名、密码);
}
}
}
我想使用foreach循环浏览我的文件,但我不确定如何使用


感谢您的帮助

因为OP在一个文件中提供了有关多个凭据的详细信息。 最常见的方法是序列化。二进制或xml都可以

相关主题:

不过,版本兼容可能是您的下一个问题

也许能解决你的问题

====== 假设文件夹中有一束txt文件

必须做两件事

  • 函数接受文件路径参数
  • 一个帮助您遍历所有文件的函数
  • 重写
    反序列化SignupDetails
    以获取文件路径

            public static Users DeserializeSignUpDetails( string szPath)
            {
                Stream stream = new FileStream( szPath, FileMode.Open, FileAccess.Read);
                IFormatter formatter = new BinaryFormatter();
                Users objnew = (Users)formatter.Deserialize(stream);
                stream.Close();
                return objnew;
            } 
    
    循环浏览文件并获取所有登录凭据。它可以放在主程序中

            List<Users> GetAllLoginCredential()
            {
                List<Users> list = new List<Users>();
                string[] files = Paths.GetFileName( "D:\\YourDirectory" );
                foreach( var path in files ){
                    Users user = SaveToFile.DeserializeSignUpDetails( path );
                    list.Add( user );
                }
            }
    
    List GetAllLoginCredential()
    {
    列表=新列表();
    string[]files=path.GetFileName(“D:\\YourDirectory”);
    foreach(文件中的var路径){
    Users user=SaveToFile.DeserializeSignUpDetails(路径);
    列表。添加(用户);
    }
    }
    
    然后您可以检查每个用户。此外,您可能希望缓存它以防止重复打开文件


    顺便说一下,
    用户
    只有一个用户信息,您可能希望它是
    用户

    ,因为OP在一个文件中提供了有关多个凭据的详细信息。 最常见的方法是序列化。二进制或xml都可以

    相关主题:

    不过,版本兼容可能是您的下一个问题

    也许能解决你的问题

    ====== 假设文件夹中有一束txt文件

    必须做两件事

  • 函数接受文件路径参数
  • 一个帮助您遍历所有文件的函数
  • 重写
    反序列化SignupDetails
    以获取文件路径

            public static Users DeserializeSignUpDetails( string szPath)
            {
                Stream stream = new FileStream( szPath, FileMode.Open, FileAccess.Read);
                IFormatter formatter = new BinaryFormatter();
                Users objnew = (Users)formatter.Deserialize(stream);
                stream.Close();
                return objnew;
            } 
    
    循环浏览文件并获取所有登录凭据。它可以放在主程序中

            List<Users> GetAllLoginCredential()
            {
                List<Users> list = new List<Users>();
                string[] files = Paths.GetFileName( "D:\\YourDirectory" );
                foreach( var path in files ){
                    Users user = SaveToFile.DeserializeSignUpDetails( path );
                    list.Add( user );
                }
            }
    
    List GetAllLoginCredential()
    {
    列表=新列表();
    string[]files=path.GetFileName(“D:\\YourDirectory”);
    foreach(文件中的var路径){
    Users user=SaveToFile.DeserializeSignUpDetails(路径);
    列表。添加(用户);
    }
    }
    
    然后您可以检查每个用户。此外,您可能希望缓存它以防止重复打开文件


    顺便说一下,
    用户
    只有一个用户信息,您可能希望它是
    用户

    您可能需要查看的几个点-

  • 将类名从
    Users
    更改为
    User
    ,因为这是
    User
    的单一表示形式
  • 您可以
    将文件中存储的所有用户转换为
    列表
    ,如下所示:

       public static List<Users> DeserializeSignUpDetails()
        {
            List<Users> users = new List<Users>();
    
            using (Stream stream = new FileStream(@"SignUp.txt", FileMode.Open, FileAccess.Read))
            {
                if (stream.Length != 0)
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    while (stream.Position != stream.Length)
                    {
                        users.Add((Users)formatter.Deserialize(stream));
                    }
                    return users;
                }
    
            }
    
            return users;
    
        }                    
    
    其他注意事项:

  • 在读取流时使用以正确处理

  • 在序列化/反序列化之前,检查流的
    Null
    empty
    ,以鼓励
    防御性编程-

    if (stream.Length != 0)
    

  • 你可能需要看几点-

  • 将类名从
    Users
    更改为
    User
    ,因为这是
    User
    的单一表示形式
  • 您可以
    转换