每当文本文件更改文本中的参数时,请创建一个新的文本文件 c#

Whenever the text file changes a parameter in the text, create a new text file c#

提问人:Edilson Lemos 提问时间:6/24/2023 最后编辑:Edilson Lemos 更新时间:6/26/2023 访问量:155

问:

我正在创建一个应用程序,每天我都会通过 URL 收到文本并保存为项目文件夹中的文本文件,但每天都会覆盖文件,我想每天保存一个新文件,例如:2845、2846、2847 等,只有在数字变量更新时才创建一个新文件, 使用“数字”变量,我需要进行搜索并找到引用带有抽奖详细信息的数字的文本文件,但我没有得到它,有人可以帮我吗?我每天只得到一个文件,我使用此代码创建文本

private void Details()
 {
     List<string> lastSorteio = new List<string>();
     string siteLotofacil = @"https://servicebus2.caixa.gov.br/portaldeloterias/api/lotofacil";

     var requisition = (HttpWebRequest)WebRequest.Create(siteLotofacil);
     requisition.MaximumAutomaticRedirections = 1;
     requisition.AllowAutoRedirect = true;
     request.CookieContainer = new CookieContainer();
     var response = (HttpWebResponse)requisicao.GetResponse();

     using (var responseStream = response.GetResponseStream())
     {
         using (var fileStream = new FileStream(Path.Combine(directory + "C:\\BoaSorte\\currentResult.txt"), FileMode.Create))
         {
             responseStream.CopyTo(fileStream);
         }
     }
 }

我是这样读的

   private void ReadFile()
 {
     var file = new StreamReader("C:\\BoaSorte\\currentresult.txt", Encoding.UTF8);
     stringline;

     while ((line = file.ReadLine()) != null)
         // Initialize array of 5 sequential integers.
         contestlist.Items.Add(line.ToString());

     file.Close();
 }

我有一个带有变量的 Result 类

public Resultado()
    {
        this.idLoteria = idLoteria;
        this.acumulado = acumulado;
        this.dataApuracao = dataApuracao;
        this.dataProximoConcurso = dataProximoConcurso;
        this.dezenasSorteadasOrdemSorteio = dezenasSorteadasOrdemSorteio;
        this.exibirDetalhamentoPorCidade = exibirDetalhamentoPorCidade;
        this.id = id;
        this.indicadorConcursoEspecial = indicadorConcursoEspecial;
        this.listaDezenas = listaDezenas;
        this.listaDezenasSegundoSorteio = listaDezenasSegundoSorteio;
        this.listaMunicipioUFGanhadores = listaMunicipioUFGanhadores;
        this.listaRateioPremio = listaRateioPremio;
        this.listaResultadoEquipeEsportiva = listaResultadoEquipeEsportiva;
        this.localSorteio = localSorteio;
        this.nomeMunicipioUFSorteio = nomeMunicipioUFSorteio;
        this.nomeTimeCoracaoMesSorte = nomeTimeCoracaoMesSorte;
        this.numero = numero;
        this.numeroConcursoAnterior = numeroConcursoAnterior;
        this.numeroConcursoFinal_0_5 = numeroConcursoFinal_0_5;
        this.numeroConcursoProximo = numeroConcursoProximo;
        this.numeroJogo = numeroJogo;
        this.observacao = observacao;
        this.premiacaoContingencia = premiacaoContingencia;
        this.tipoJogo = tipoJogo;
        this.tipoPublicacao = tipoPublicacao;
        this.ultimoConcurso = ultimoConcurso;
        this.valorArrecadado = valorArrecadado;
        this.valorAcumuladoConcurso_0_5 = valorAcumuladoConcurso_0_5;
        this.valorAcumuladoConcursoEspecial = valorAcumuladoConcursoEspecial;
        this.valorAcumuladoProximoConcurso = valorAcumuladoProximoConcurso;
        this.valorEstimadoProximoConcurso = valorEstimadoProximoConcurso;
        this.valorSaldoReservaGarantidora = valorSaldoReservaGarantidora;
        this.valorTotalPremioFaixaUm = valorTotalPremioFaixaUm;

    }
C# 文件 文本 读行

评论

0赞 Martheen 6/24/2023
learn.microsoft.com/en-us/dotnet/api/system.io.file.move
1赞 Ňɏssa Pøngjǣrdenlarp 6/24/2023
您对文件名进行了硬编码,因此它始终相同。添加一种方法来设计每次使用的唯一名称(可能使用日期???)。有几个我们无法知道的细节,例如每天是否只有一个文件等等。
1赞 Fildor 6/24/2023
Path.Combine 的使用也搞砸了。
0赞 Fildor 6/24/2023
我还建议用英语编码。这使得在像这里这样的平台上分享它变得更加容易。
1赞 Joel Coehoorn 6/25/2023
调用已经是字符串的值(如)是一个初学者的错误:/ToString()line

答:

2赞 dr.null 6/25/2023 #1

若要在给定目录中每天有一个可以覆盖或追加的文件,请将 DateTime.Today 日期追加到文件名,将目录和文件名追加 Path.Combine 以创建路径,并将 Path.ChangeExtension 追加扩展名。

private string GetFileName()
{
    var dir = @"c:\BoaSorte";
    var datePart = DateTime.Today.ToString("MMddyyyy");
    var fileName = "Result";
    var file = Path
        .ChangeExtension(Path
        .Combine(dir, $"{fileName}{datePart}"), "txt");

    return file;
}

若要使用特定模式在每次调用中创建唯一文件,请在循环中连接文件路径,如果文件不存在,则通过调用 File.Exists 方法断开文件路径。

private string GetUniqueFile()
{
    var dir = @"c:\BoaSorte";
    var suffix = DateTime.Today.ToString("MMddyyyy");
    var fileName = "Result";
    int fileNum = 1;
    string outFile;

    while (true)
    {
        outFile = Path.Combine(dir, $"{fileName}{suffix}{fileNum}.txt");
        if (!File.Exists(outFile)) break;
        fileNum++;
    }

    return outFile;
}

更好的是,为此函数使用一个实用程序方法,用于获取和连接文件的各个部分。例如:

internal static class Utils
{
    internal static string GetUniqueFile(
        string dir,
        string fileName,
        string suffix,
        int seed,
        string extension)
    {
        string outFile;

        while (true)
        {
            outFile = Path
                .ChangeExtension(Path
                .Combine(dir, $"{fileName}{suffix}{seed}"), extension);
            if (!File.Exists(outFile)) break;
            seed++;
        }

        return outFile;
    }
}

从你的方法中调用它,如下所示:

private void Details()
{
    var lastSorteio = new List<string>();
    var siteLotofacil = @"https...";
    var file = Utils.GetUniqueFile(
        @"c:\BoaSorte", "currentResult", "-", 2846, "txt");

    // ...

    using (var response = (HttpWebResponse)requisition.GetResponse())
    using (var responseStream = response.GetResponseStream())
    using (var fileStream = new FileStream(file, FileMode.Create))
    {
        responseStream.CopyTo(fileStream);
    }
}

评论

0赞 Edilson Lemos 6/26/2023
你好 dr.null ,总是感谢您的大力帮助,我重新表述了问题以便您更好地理解,我尝试在 Utils 类中使用它,如下所示 int fileNum = Result.numero;像这样保存它“currentResult-2846.txt”但它不起作用,如果我设法像这样保存它,我将不胜感激,我会自己更正搜索,谢谢
1赞 dr.null 6/26/2023
@EdilsonLemos 现在试试吧,添加了 param。如果这就是你的意思。seed
0赞 Edilson Lemos 6/26/2023
dr.null 再次非常感谢你,它不是我想要的 100%,但它会帮助我,我想用文本文件的“number”变量保存文本,但不要增加 ++,因为每天都有一个“数字”“新的,它是自动的,如果”number“参数更新,我只需要创建第九个文本, 一个拥抱。
1赞 dr.null 6/26/2023
@EdilsonLemos 从哪里来?如果你知道这个数字,那么它就很简单:。假设是类的一个实例。numbervar file = Path.Combine(@"c:\BoaSorte", $"currentResult-{Result.numero}.txt");ResultResultado
1赞 Edilson Lemos 6/27/2023
该死的!它就在我的脸上!太完美了,我想我会把你的名字作为应用程序的贡献者,呵呵呵,伙计!你几乎完成了一半的代码,非常感谢,没有你,我不会离开,如果你有一个频道,页面,把它放在那里,我会跟着你,一个大大的拥抱