I have a text editor I made, which has been working perfectly for the past month without any problems. But today, and all of yesterday, every time I open a txt file from explorer (double clicking it) instead of it opening in my editor, a message appears saying:
Text Editor has encountered a problem and needs to close. We are sorry
for this inconvenience. [Send error report] or [Don’t send].
When I click on “What does this error report contain”, it shows the following:
EventType : clr20r3 P1 : texteditor.exe P2 : 1.0.0.0 P3 : 4ad32c52
P4 : mscorlib P5 : 2.0.0.0 P6 : 492b834a P7 : 343f P8 : d8
P9 : system.io.filenotfoundexception
So that basically tells me that its looking for a file that doesn’t exist. But here’s my problem:
The file I am trying to open DOES exist because I just double clicked on it
Here is the code that opens a file that has been double clicked on from windows explorer:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace TextEditor
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args.Length >= 1)
{
Form1 f = new Form1();
f.txt.Text = System.IO.File.ReadAllText(args[0]);
f.txt.Tag = args[0];
Application.Run(f);
}
else Application.Run(new Form1());
}
}
}
The path you’re double-clicking on probably contains one or more spaces, causing the path to be sent as multiple command line arguments.
You need to change the
.txtassociation to send the path in quotes and/or change your app to read all command line arguments and combine them with spaces.Explorer is sending a command such as
Since there aren’t any quotes around the string, it’s interpreted as 4 different parameters separated by spaces.
You can change the association for
.txtfiles toYourApp.exe "%1"(with the%1in quotes) to force the entire string to be treated as one argument.Alternatively, you could replace
args[0]withString.Join(" ", args)to put the arguments back together again.