Open a Text File in Notepad using VB.Net 2005

C

Chris Johnson

I have what seems to be such a simple thing yet I cannot figure out how
to do it.

I am using a streamwriter to build a text file. At the end of the
process I want to open that same text file in notepad so the user can
see what was built.

I cannot for the life of me figure out how to get the text file to open
up in notepad on the screen. All the processes I have tried opens the
file into the filestream again.
 
P

Peter Macej

System.Diagnostics.Process.Start("notepad.exe", "mydocument.txt")

This is correct and it always opens the file in Notepad. As many of us
use different program as default editor, it is better to automatically
open the file in associated application. That's even easier:

System.Diagnostics.Process.Start("mydocument.txt")
 
G

Guest

Hi Peter,
This was something that I also wanted to do. I would like to include the
program installation path in the file name and tried:

System.Diagnostics.Process.Start(Application.StartupPath & "\filename.pdf")

But this did not work I have to use:

System.Diagnostics.Process.Start("C:\Program
Files\Myprograms\Program\filename.pdf")

which works OK.

Is there a way to include the program path as the program could be installed
in a different location?
--
Cheers
Chas

***************
* Spectrum is Green *
***************
 
P

Phill W.

System.Diagnostics.Process.Start(Application.StartupPath &
"\filename.pdf")

But this did not work ...

Look at the ProcessStartInfo class - its UseShellExecute property allows
you to "launch" files just like explorer.

Imports SI=System.IO

Dim ps as New ProcessStartInfo()
With ps
.Filename = SI.Path.Combine( Application.StartupPath, "filename.pdf" )
.UseShellEexecute = True
End With

Dim p as New Process
p.StartInfo = ps
p.Start()

HTH,
Phill W.
 
T

Terry Olsen

What is the difference between
UseShellExecute=True and UseShellExecute=False?

When should each be used?
 
G

Guest

Hi Phil,
Thanks for the speedy response.

I tried the code you suggest but when run it debugs out at

p.Start()

with the error:
--------------------------------------------------------------------------------------
An unhandled exception of type 'System.ComponentModel.Win32Exception'
occurred in system.dll

Additional information: The system cannot find the file specified
--------------------------------------------------------------------------------------

I have double checked the code and ensured the Imports is OK.

I also tried adding a backslash to the filename "\filename.pdf" but still
get the error

Any ideas?

BTW whats HTH, ?

Here's the code I used:

Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MenuItem4.Click
'Open My File.PDF
Dim ps As New ProcessStartInfo
With ps
.FileName = SI.Path.Combine(Application.StartupPath, "\My
File.pdf")
.UseShellExecute = True
End With
Dim p As New Process
p.StartInfo = ps
p.Start()


End Sub


--
Cheers
Chas

***************
* Spectrum is Green *
***************
 
C

Chris Dunaway

Are you testing this through the debugger? If so, the StartupPath may
not have the value you expect.

I recommend you step through the code and then inspect the value of the
..FileName property and make sure that your file exists in that location.
 
G

Guest

Hi Chris,
Thought that was it as I had only tested the debugger but then i rebuilt the
app and installer, installed and tested and got the same error.

BTW the line:

System.Diagnostics.Process.Start("C:\Program Files\My Programs\Program\read
me.pdf")

Works just fine in both the debug and install versions so the file must be
in the right place.
--
Cheers
Chas

***************
* Spectrum is Green *
***************
 
G

Guest

And then I saw what I wrote. Of course it will work as it specifies the path.

I checked the debug path and yes the file was not in the BIN folder as
specified. I put a copy there, ran it again and still got the error.

Would it be anything to do with DOS Filenames or Long filenames or spaces in
the file name?
--
Cheers
Chas

***************
* Spectrum is Green *
***************
 
J

james

Sometimes Application.StartupPath doesn't always return the exact path to
the executing assembly. That is why I use this little function:

Private Function mypath() As String

Return _

Path.GetDirectoryName([Assembly].GetExecutingAssembly().Location)

End Function

Here is an example of using it, using your code and mine:





mports System.Reflection

Imports System.IO

Public Class Form1

Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

Public Sub New()

MyBase.New()

'This call is required by the Windows Form Designer.

InitializeComponent()

'Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'Required by the Windows Form Designer

Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer

'It can be modified using the Windows Form Designer.

'Do not modify it using the code editor.

Friend WithEvents Button1 As System.Windows.Forms.Button

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.Button1 = New System.Windows.Forms.Button

Me.SuspendLayout()

'

'Button1

'

Me.Button1.Location = New System.Drawing.Point(144, 40)

Me.Button1.Name = "Button1"

Me.Button1.TabIndex = 0

Me.Button1.Text = "Button1"

'

'Form1

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(616, 266)

Me.Controls.Add(Me.Button1)

Me.Name = "Form1"

Me.Text = "Form1"

Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

'Open My File.PDF

Dim ps As New ProcessStartInfo

With ps

..FileName = mypath() & ("\Manual.pdf")' name of pdf file located in the Bin
Folder in this test app.

..UseShellExecute = True

End With

Dim p As New Process

p.StartInfo = ps

p.Start()

End Sub

Private Function mypath() As String

Return _

Path.GetDirectoryName([Assembly].GetExecutingAssembly().Location)

End Function

End Class



The above code works. I changed a couple of things from what you had.

james
 
J

james

Forgot to mention in my previous post, the filename(s) won't make a
difference as long as the pdf file is in the BIN folder where the executing
assembly is located. I tried it with spaces, short file names and long file
names and it works. Just won't work with reserved characters (which you
know).
james
 
G

Guest

Hi Chas,
System.Diagnostics.Process.Start(Application.StartupPath & "\filename.pdf")
should work in your case. However, remember that during design time, your app
runs from projectname\bin folder, thus the Application.StartupPath is this
folder (not C:\Program Files\Myprograms\Program\filename.pdf"). So, to test
it, you need to put a copy of filename.pdf into the bin folder.
Hope this helps.
VHD50.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top