【解決方法】ファイルに保存/読み取り/書き込みするにはどうすればよいですか


これは C# の割り当てです。 それで、私はコードを作成し、それはすべて機能しましたが、ファイルに保存する必要があると表示されます。 私のコードは次のとおりです。

C#
<pre>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Case3Password
{
    internal class Program
    {
        static void Main(string[] args)
        {
            bool que = false;
            while (que == false)
            {
                Console.WriteLine("Choose whether to login, make or change");
                string command = Console.ReadLine();
                if (command == "make" && !MadeAccount)
                {
                    MakeAccount();
                }
                else if (command == "change" && MadeAccount)
                {
                    ChangePassword();
                }
                else if (command == "login" & MadeAccount)
                {
                    Login();
                }
                else
                {
                    Console.WriteLine("incorrect choice, type either 'login', 'make' or 'change'");
                }
            }
        }
        static bool MadeAccount = false;
        static void MakeAccount()
        {
            Console.WriteLine("Input your username");
            string Username = Console.ReadLine();
            Console.WriteLine("Input your password");
            string password = Console.ReadLine();

            if (ContainsUpperAndLower(password) == true && ContainsNumbersAndSpecialCharacters(password) == true && ContainsNoNumbersAtStartOrEnd(password) == true && ContainNoSpace(password) == true && UsernamePasswordTrue(Username, password) == true)
            {
                string folder = @"C:\Temp\";
                string fileName = "Dokumenter.txt";
                string fullPath = fileName;
                string[] lines = { Username, password };
                File.WriteAllLines(fullPath, lines);
                MadeAccount = true;
                Console.WriteLine("Account succesfully created");
            }
            else
            {
                Console.WriteLine("Sorry this password doesn't meet the requirements");
            }
        }
        static void ChangePassword()
        {
            Console.WriteLine("Input your username");
            string username = Console.ReadLine();
            Console.WriteLine("Input your password");
            string password = Console.ReadLine();
            string folder = @"C:\Temp\";
            string fileName = "CSharpCornerAuthors.txt";
            string fullPath = folder + fileName;
            string[] text = File.ReadAllLines(fullPath);
            string PreviousUsername = text[0];
            string PreviousPassword = text[1];

            if (username == PreviousUsername && password == PreviousPassword)
            {
                Console.WriteLine("What do you want to change your password to?");
                string NewPassword = Console.ReadLine();


                if (PreviousPassword != NewPassword)
                {

                    if (ContainsUpperAndLower(password) == true && ContainsNumbersAndSpecialCharacters(password) == true && ContainsNoNumbersAtStartOrEnd(password) == true && ContainNoSpace(password) == true && UsernamePasswordTrue(username, password) == true)
                    {
                        string[] lines = { username, NewPassword };
                        File.WriteAllLines(fullPath, lines);
                        Console.WriteLine("Password succesfully changed");
                    }
                    else
                    {
                        Console.WriteLine("Sorry this password doesn't meet the requirements");
                    }
                }
            }
        }

        static void Login()
        {
            Console.WriteLine("Input your username");
            string username = Console.ReadLine();
            Console.WriteLine("Input your password");
            string password = Console.ReadLine();
            string folder = @"C:\Temp\";
            string fileName = "CSharpCornerAuthors.txt";
            string fullPath = folder + fileName;
            string[] text = File.ReadAllLines(fullPath);
            string PreviousUsername = text[0];
            string PreviousPassword = text[1];
            if (username == PreviousUsername && password == PreviousPassword)
            {
                Console.WriteLine("Succesfully logged in");
            }
            else
            {
                Console.WriteLine("Sorry either your username or password was incorrect");
            }

            //6 metoder stillet op --->
            //Første metode har jeg kaldet LengthCheck og her har jeg lavet en if/else statement
        }
        public static bool LengthCheck(string password) 
        {
            if (password.Length >= 12) //Hvis password er større end/lig med 12 tegn så returnere den en true værdi
            {
                return true;
            }
            else //En else statement hvis nu den password er mindre end 12
            {
                return false; //Hvis den er ´mindre end 12 tegn så kommer den tilbage false
            }

        }

        //2. metode hvor jeg siger at password SKAL anvende både store og små bogstaver
        public static bool ContainsUpperAndLower(string password)
        {
            int i = 0; //det her er tælleren som bliver brugt senere i koden

            //2 booleans som begge er sat til at være false
            bool ContainsUpperCase = false;
            bool ContainsLowerCase = false;

            //Jeg har brugt en while-loop her som siger at password-længde er større end i
            //og UpperCase && LowerCase
            while (i < password.Length && !(ContainsUpperCase && ContainsLowerCase))
            {
                char letter = password[i]; //jeg har sat char letter = password[i]; altså indivduelle bogstaver siden at jeg skal tjekke alle bogstaverne igennem

                if (ContainsUpperCase == false)
                {
                    ContainsUpperCase = Char.IsUpper(letter);
                }
                if (ContainsLowerCase == false)
                {
                    ContainsLowerCase = Char.IsLower(letter);
                }
                i = i + 1; //Man kan også bruge i++ her. Det præcist det samme
            }
            return ContainsUpperCase && ContainsLowerCase;
        }


        public static bool ContainsNumbersAndSpecialCharacters(string password)
        {
            int i = 0;

            bool Numbers = false;
            bool SpecialCharacters = false;

            while (i < password.Length && !(Numbers && SpecialCharacters))
            {
                char letter = password[i];

                if (Numbers == false)
                {
                    Numbers = Char.IsDigit(letter);
                }
                if (SpecialCharacters == false)
                {
                    SpecialCharacters = !Char.IsLetterOrDigit(letter);
                }
                i = i + 1;
            }
            return Numbers && SpecialCharacters;
        }


        public static bool ContainsNoNumbersAtStartOrEnd(string password)
        {
            if (Char.IsDigit(password[0]) == false & Char.IsDigit(password[password.Length - 1]) == false)
            {
                return true;
            }
            else
            {
                return false;
            }
        }



        public static bool ContainNoSpace(string password)
        {
            int i = 0;

            bool NoSpace = false;

            while (i < password.Length && !(NoSpace))
            {
                if (NoSpace == false)
                {
                    NoSpace = Char.IsWhiteSpace(password[i]);
                }
                i = i + 1;
            }
            NoSpace = !NoSpace;

            return NoSpace;
        }



        public static bool UsernamePasswordTrue(string password, string Username)
        {
            if (Username.ToLower() != password.ToLower())
            {
                return true;
            }
            else
            {
                return false;
            }

        }

    }
}

私が試したこと:

ビデオやオンラインで調べてみましたが、見たことを自分のコードにどのように適用できるかよくわかりません。そのため、誰かがここで私を助けてくれることを願っています。 このファイル全体のせいで、私は長い間このプロジェクトに行き詰まっていました。 私はそれを本当に理解したことがありませんでした。 基本的に、ユーザーがアカウントを作成したり、ログインしたり、パスワードを変更したりするときに、ユーザーからの入力を保存する必要があります。

基本的に、ログインとパスワードをクリアテキストでテキストファイルに保存する必要があります。 ログイン時またはコードの変更時に再度ロードできます。

解決策 1

引用:

基本的に、ログインとパスワードをクリアテキストでテキストファイルに保存する必要があります。

パスワードをクリア テキストで保存しないでください。これは重大なセキュリティ リスクです。 その方法については、ここにいくつかの情報があります。 パスワードの保管: その方法。[^]

また、これが Web ベースであり、欧州連合ユーザーがいる場合は、GDPR が適用されるため、パスワードを機密データとして扱い、安全な方法で保存する必要があることを意味します。 テキストはそのどちらでもないので、罰金は …. うーん … 未払いになる可能性があります。 2018年12月、ドイツの企業はそれだけの理由で2万ユーロという比較的低額の罰金を科せられた。

第二に、なぜそれがあなたに困難をもたらすのでしょうか?
ファイルに情報を保存するには、.INI ファイル、.CONFIG ファイル、「ストレート テキスト」ファイルから、JSON、XML、CSV、そしてマルチユーザー データベースに至るまで、さまざまな方法があり、「適切な解決策」はによって異なります。利用可能なものと、そのデータを使って何をしようとしているのかを正確に把握します。 これでその一部が説明されるかもしれません。 それはデータベースではありません、おい![^]

ただし、テキスト ファイルだけが必要な場合は、次のいずれかを使用します。 File.WriteAllText[^] 必要なのはファイルへのパスと書き込む文字列だけであり、読み戻すのも同様に簡単です。

座ってリンクを読み、データをどうする必要があるかを正確に考えてください。 実際の実装は簡単です。

解決策 2

ログインまたはパスワード変更アクションの場合は、次の操作を行います。

C#
string folder = @"C:\Temp\";
string fileName = "CSharpCornerAuthors.txt";
string fullPath = folder + fileName;
string[] text = File.ReadAllLines(fullPath);

新しいアカウントを作成するには、次のようにします。

C#
string folder = @"C:\Temp\";
string fileName = "Dokumenter.txt";
string fullPath = fileName;
string[] lines = { Username, password };
File.WriteAllLines(fullPath, lines);

何が間違っているのかわかりますか?

コメント

タイトルとURLをコピーしました