2015-12-31 9 views
0

У меня есть форма печати, которая выполняет задания печати. Когда я закрываю форму печати без печати я нажимаю кнопку ЗакрытьНе удается удалить файл после отображения на printpreviewcontroller

Закрыть кнопка имеет

private void Close_Click(object sender, EventArgs e) 
    { 
     PublicVariables.PrintData = -1; 
     PublicVariables.PrintStat = false; 
     ppc.Document = null; 
     ppc.Dispose(); 
     streamToRead.Close(); 
     this.Hide(); 
    } 

Но каждый раз, когда я создаю текстовый файл для печати удаляет старое.

Удалить метод:

public static bool DeleteData() 
    { 
     bool result=true; 
     string pattern = "data??.txt"; 
     string appPath = Path.GetDirectoryName(Application.ExecutablePath); 
     var matches = Directory.GetFiles(appPath, pattern); 
     foreach (string file in Directory.GetFiles(appPath).Intersect(matches)) 
     { 
      try 
      { 
       File.Delete(file); 
       result =true; 
      } 
      catch (IOException e1) 
      { 
       MessageBox.Show(e1.ToString()); 
       return false; 
      } 
     } 
     return result; 
    } 

Но если IOException происходит не может удалить любой файл. Однако форма загрузки всех потоков у меня есть DeleteData(), и это без проблем удаляет текстовые данные.

Есть ли способ удалить этот текстовый файл внутри потока, в котором он создан?

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

Здесь ниже две процедуры, которые создают данные ?? TXT

http://www.turcguide.com/stack/procedures.txt

Здесь процедуры CreateDataFile (строка Fname) и GetNewfName (строка Старое_имя) ссылка:

http://turcguide.com/stack/createdatafile.txt

+0

Какое сообщение об ошибке? Открыт ли документ в то время, когда вы пытаетесь удалить? – grek40

+0

@ grek40 Файл занят vshost. У меня такой же метод существует в разных потоках они работают. Я посмотрел, не закрыл ли я файл, который создал данные .txt (data00.txt, data01.txt так долго до data99.txt). Кажется, все они закрыты после создания данных. Txt Как показано в моем методе после удаления printpreviewcontroller, я закрываю считыватель потока. Удаление происходит непосредственно перед созданием новых данных. –

+0

Возникает ли та же проблема при запуске кода вне отладчика visual studio? (См. Http://stackoverflow.com/questions/774187/what-is-the-purpose-of-vshost-exe-file) – grek40

ответ

0

Контроллер printpreview должен блокировать этот файл, как если бы мы отменили печатный документ на принтере, для которого требуется время.

После закрытия и удаления формы printpreviewcontroller, когда я попытаюсь удалить 4-5 попыток позже, файл будет удален.

Моя точка зрения исходит от printpreviewcontroller.

+0

Моя точка зрения: у вас есть * какое-то место, где вы не закрываете/не размещаете правильно и, вероятно, не являетесь частью кода, который вы указали в вопросе. – grek40

+0

@ grek40 нет другого места, где я отношусь к этому файлу, и когда я пытаюсь удалить этот файл после нескольких попыток, он будет удален, поскольку мы отменим задание на печать, которому потребуется немного кругов времени до его удаления. Если он действительно удерживается и не закрыт должным образом, он никогда не будет удален. Я изменил свой код, который заполняет printpreviewcontroller, и создал данные .txt и показал его в списке. Он удаляется сразу после закрытия файла. –

+1

Ну, если вы не закрываете его, дескриптор собственного файла закрывается при завершении обработки управляемого файла, что происходит в любое неопределенное время после исчезновения вашей последней ссылки. Таким образом, вы можете удалить файл после того, как сборщик мусора завершил свою работу. Вы можете проверить его, вызвав 'System.GC.Collect()' перед попыткой удалить файлы. Если это решает вашу проблему, вы не закрываете файл во всех местах. – grek40

 Смежные вопросы

  • Нет связанных вопросов^_^