Сброс в консоль работает как шарм, но не в файл, C # - PullRequest
0 голосов
/ 04 июня 2010

Рассмотрим этот кусок кода:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace DataExtractor
{
    class Program
    {
        static void Main(string[] args)
        {
            string destpath = Directory.GetCurrentDirectory();
            destpath = Path.Combine(destpath, "DIR");
            DirectoryInfo Dest = Directory.CreateDirectory(destpath);
            DirectoryInfo Source = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\IEOD");
            FileInfo[] fiArr = Source.GetFiles("*.csv");
            Console.WriteLine("Search Date:");
            string srchdate = Console.ReadLine();
            FileInfo r;
            foreach (FileInfo f in fiArr)
            {
                r = new FileInfo(Path.Combine(destpath,f.Name));
                r.Create();
                string path = Path.Combine(destpath, f.Name);
                string[] lines = File.ReadAllLines(f.FullName);
              var output = lines.Where(line => line.Split(',')[0] == srchdate);

                        try
                        {
                            //File.WriteAllLines(path, output.ToArray());
                            Console.WriteLine(output.ToArray());
                            Console.Write("\n");

                        }
                        catch(Exception ex)
                        {
                            Console.WriteLine(ex.StackTrace);
                        }


                }



            Console.ReadKey();


        }
    }
}

Что не так с этим фрагментом кода? Внутри блока try Console.WriteLine () работает как символ, но закомментированная строка внутри блока try File.WriteAllLines () не работает. Появляется сообщение об ошибке: указанный файл {} используется другим процессом.

Это происходит независимо от того, что, если я использую StreamWriter или File.WriteAllLines ()

Помощь оценена. Soham

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

File.WriteAllLines () создает, записывает и закрывает файл, поэтому вы не хотите вызывать r.Create ();

1 голос
/ 04 июня 2010

Ваш r объект удерживает его открытым.

1 голос
/ 04 июня 2010

Вы должны удалить следующие строки:

    r = new FileInfo(Path.Combine(destpath,f.Name));
    r.Create();

Вы создаете выходной файл и оставляете его открытым. File.WriteAllLines () создаст файл для вас (и закроет его, когда будет сделано)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...