Создать и открыть временный текстовый файл с C # Winforms - PullRequest
0 голосов
/ 15 января 2019

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

Я знаю о using StreamWriter txtFile = File.CreateText(@"C:\path\Foo.txt"), и я использовал его для генерации журналов ошибок и прочего, но это может не сработать, потому что я не обязательно хочу создавать новый постоянный файл. По сути, я бы хотел:

Пользователь нажимает кнопку, и затем появляется блокнот с некоторой информацией (на основе данных, хранящихся в переменных). Затем пользователь может решить, хочет ли он сохранить его или распечатать или что-то еще. Когда они закрывают его, им будет предложено сохранить (как всегда делает Блокнот), а затем, если они решат не сохранять, файл просто исчезнет. Если я воспользуюсь приведенным выше кодом, я получу новый файл, созданный каждый раз, когда пользователь нажимает эту кнопку, а я не хочу, потому что мои диски будут заполнены 10000 текстовыми файлами.

E : Хорошо, пара людей предложили использовать это решение:

SendMessage для Notepad ++ в C #

Но это не работает для меня. Я скопировал код, вставил кнопку, изменил Notepad++ на Notepad, и он не работает. Я добавил в соответствующие строки using. До сих пор не работает. Я не говорю, что это не решение, я просто говорю, что не могу заставить его работать.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете сделать следующее, используя буфер обмена и управляя процессом notepad.exe (он должен работать для любого текстового редактора):

1) Добавить ссылку:

    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

2) Откройте блокнот и вставьте свои данные:

public void OpenNotepad()
{
    Clipboard.SetText("All your text");

    Process process = Process.Start("notepad.exe");
    process.WaitForInputIdle();
    SetForegroundWindow(process.MainWindowHandle);
    SendKeys.Send("^V");
}

Помните, что это не создаст никакого временного файла, но я предполагаю, что вы хотите именно такое поведение.

0 голосов
/ 15 января 2019

Первый вариант: Я бы предложил показать пользователю диалог сохранения.

Прочитайте документацию по адресу: https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-save-files-using-the-savefiledialog-component

   // Displays a SaveFileDialog so the user can save the Image  
   // assigned to Button2.  
   SaveFileDialog saveFileDialog1 = new SaveFileDialog();  
   saveFileDialog1.Filter = "Text Image|*.txt";  
   saveFileDialog1.Title = "Save the File";  
   saveFileDialog1.ShowDialog();  

   // If the file name is not an empty string open it for saving.  
   if(saveFileDialog1.FileName != "")  
   {   
       /// Write a text file here at path saveFileDialog1.FileName
   }

Второй вариант (если вы все еще хотите придерживаться временных файлов):

Я бы предложил использовать временную папку.

   string windowsTempPath = Path.GetTempPath();

   var filePath = Path.Combine(windowsTempPath, "file_" + DateTime.Now.ToFileTimeUtc() + ".txt");

   //// Write txt file

   //// For opening file, use Process.Start
   Process.Start(filePath);

Это запустит программу по умолчанию, чтобы открыть текстовый файл. Вы не будете зависеть от блокнота или блокнота ++.

Надеюсь, это поможет.

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