ZaYeD1 Ответов: 1

Как использовать автоматический порядковый номер


я делаю небольшие программы, такие как счет-фактура, я делаю все хорошо, кроме
автоматический порядковый номер
я хочу использовать метку (номер) и кнопку (Экспорт)
чтобы закончить с этого счета-фактуры
затем автоматически перейдите к следующему пункту

int num = 0;
номер++;
этикетка.Текст = num.Метод toString();

проблема
когда я закрываю программу и открываю ее снова
в последовательности от (1)

есть ли способ сохранить на txt файл и заставить программу получить последнюю сохраненную цифру
затем добавьте (1) к последней цифре ?
по модулю записи StreamWriter &амп; что streamreader или другим ???

Что я уже пробовал:

int num = 0;
Модулю записи StreamWriter ео = новая модулю записи StreamWriter("Data_ID.txt", правда);
строка sw_AddID = lblID.Текст ;
ув.Метода WriteLine(sw_AddID);
номер++;
ув.Рядом();

lblID.Текст = num.Метод toString();

gggustafson

У вас есть ряд проблем. Я предлагаю вам записать (на листе бумаги), какова последовательность действий. Я бы сказал, что первое - это проверка Data_ID.txt существует; если это так, то считайте значение num из файла и закройте файл; в противном случае установите num на его первое значение минус единица. Сделайте то, что вам нужно сделать с num++. Запишите новое значение num в Data_ID.txt. Примечание: в вашем коде вы не читали значение, поэтому num всегда сохраняется как 1.

ZaYeD1

посмотреть снова
когда я закрываю программу и открываю ее снова
я хочу прочитать первую последнюю цифру в идентификаторе, а затем добавить +1 для получения нового идентификатора
пример, если я делаю ID 1 , 2 и 3, это означает счет-фактуру 3x, но если я закрываю программу
и я открываю его снова идентификатор начинается с 1
а я хочу начать с 4-х
как я это делаю???

я делаю только это

int num = 0;

private void btnID_Click(object sender, EventArgs e)


 StreamWriter sw = new StreamWriter("Data_ID.txt", true);
                string sw_AddID = lblID.Text + ";";
                sw.WriteLine(sw_AddID);
                num++;
                sw.Close();

                lblID.Text = num.ToString();

gggustafson

Я думаю, что у нас есть языковое недопонимание. Вы говорите, что хотите читать, но нигде в вашем коде вы не читаете. Вам нужно использовать StreamReader для чтения файла и StreamWriter для записи файла. Как я уже сказал в своем первоначальном ответе, вы не выполняете чтение.

1 Ответов

Рейтинг:
7

gggustafson

/// In the original example, a relative filename was used. This is not 
/// what should be used. The directory name of a relative path will 
/// default to the directory containing the executable that is 
/// currently executing. Even if that is desired, and it is normally 
/// not desired,the full pathname should be provided, using code like
/// 
///     filename = Path.GetDirectoryName ( 
///                         Assembly.
///                         GetEntryAssembly ( ).
///                         Location ) + 
///                <relative-filename>;
/// 
/// By so doing, following programmers will more easily understand the 
/// location of the file.
/// 
/// It is not recommended that a data file be collocated with the 
/// executable because there is no connection between the two. The 
/// executable could be moved, thereby invalidating the pathname to 
/// the data file.
/// 
/// If the file is located in some other location, its fully qualified 
/// pathname should be provided.
/// 
/// When using StreamReader and StreamWriter, enclose reading and 
/// writing within a using block. This insures that the streams will 
/// be closed (like enclosing the block in a try-finally block without 
/// the hassle of a finally block).
/// 
/// The following is an example using these thoughts.
using System;
using System.IO;
using System.Reflection;

class demonstration
    {
    int     data_id = 0;
    string  filename = Path.GetDirectoryName ( 
                                Assembly.
                                GetEntryAssembly ( ).
                                Location ) + 
                       "Data_ID.txt";

    // *************************************************** demonstrate
    
    void demonstrate ( )
        {
// *************************************** AT THE START OF THE PROGRAM
                                        
                                        // if the file exists, read 
                                        // the value of data_id; 
                                        // otherwise leave its value 
                                        // as zero since it is about 
                                        // to be incremented
        if ( File.Exists ( filename ) )
            {
            try 
                {
                using ( StreamReader sr = 
                                     new StreamReader ( filename ) )
                    {
                    string  line = sr.ReadLine ( );
                    
                    if ( !String.IsNullOrEmpty ( line ) )
                        {
                        data_id = Convert.ToInt32 ( line );
                        }
                    }
                }
            catch 
                {
                
                }
            }
        data_id++;

// ********************************** PERFORM SOME ACTION WITH data_id

// ***************************************** AT THE END OF THE PROGRAM

                                        // note that by setting the 
                                        // second parameter false, 
                                        // the data is not appended,
                                        // rather the file is over-
                                        // written
        try 
            {
            using ( StreamWriter sw = new StreamWriter ( filename, 
                                                         false ) )
                {
                sw.WriteLine ( data_id );
                }
            }
        catch 
            {
            
            }

        } // demonstrate

    } // class demonstration


ZaYeD1

Большое спасибо! :)