Файл используется другим процессом, я должен закрыть его?Как? - PullRequest
2 голосов
/ 02 января 2012

Я использую текстовый файл, чтобы иметь некоторые данные для более поздних целей. Поэтому я проверяю, существует ли файл, если нет, я создаю новый файл, когда мне это нужно. Это дает мне ошибку, говоря, что мой файл все еще используется другим процессом, но я не уверен, почему это так.

Вот как я это делаю. Здесь я проверяю, существует ли файл, который запускается при запуске программы:

    private void CreateLastOpenFile()
    {
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        if (!File.Exists(file))
        {
            File.Create(file);
        }
    }

Теперь я добавляю к нему некоторые данные при проверке или создании нового файла (у меня это в двух местах в моей программе):

CreateLastOpenFile();
File.WriteAllText(file, data);

Что здесь может быть не так? Я прочитал несколько примеров из Сети, но ничего не видел о закрытии каких-либо файлов.

Ответы [ 5 ]

4 голосов
/ 02 января 2012

Попробуй это.Это закроет открытый поток во время создания файла

 if (!File.Exists(file))
        {
         FileStream str = File.Create(file);
         str.Close();
        }
4 голосов
/ 02 января 2012

File.Create создает FileStream, который блокирует файл. Вы должны закрыть это. На самом деле, вам даже не нужно создавать файл. File.WriteAlltext сделает это за вас

2 голосов
/ 02 января 2012

Вы не закрываете дескриптор потока, который возвращает File.Create().

Предлагаем не использовать File.Create() в вашем случае.Вы можете просто использовать File.WriteAllText(file, data); - согласно документации MSDN он создает файл, если он не существует, или перезаписывает содержимое, когда файл существует.После этого закрывается файл потока.

2 голосов
/ 02 января 2012

Я рекомендую вам создать и заполнить данными файл за один шаг, используя некоторый класс, такой как StreamWriter, который позволяет вам избавиться от класса, у вас не должно возникнуть проблем с этим, вот пример:

StreamWriter Swr = new StreamWriter(FilePath); 
Swr.Write(Data);          
Swr.Close(); 
Swr.Dispose();

// При закрытии и удалении вы убедитесь, что файл больше не заблокирован

Вы также можете использовать File.WriteAllText (строка Path, строка Data), этот метод не блокирует файл.

1 голос
/ 02 января 2012

Если вы используете приведенный ниже метод для записи данных в текстовый файл, вам не нужно проверять, существует ли файл, а если нет, то создать его.«WriteAllText» сам заботится обо всех этих вещах.Он создаст файл, если он не существует, запишет данные и закроет его, или перезапишет файл, если он уже существует.File.WriteAllText (файл, данные);

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