У меня есть приложение Winforms, которое создает JSON из значений, введенных пользователем, а затем сохраняет в виде текстового файла.После сохранения файла имя файла (с путем) добавляется в полосу меню, чтобы пользователь мог легко получить доступ ко всем созданным файлам json.Если я нажимаю на полоску меню после сохранения файла, я получаю сообщение об ошибке «System.IO.DirectoryNotFoundException:« Не удалось найти часть пути ».Однако, если я перезапущу приложение и нажму на путь к файлу в строке меню, файл откроется без проблем.Я предполагаю, что даже если файл существует, что-то может «все еще разрешаться» или что-то, потому что это происходит, только если я пытаюсь получить к нему доступ во время той же «сессии», в которой был создан файл.
Я сохраняю файл следующим образом:
using (StreamWriter file = File.CreateText(filePath))
{
file.Write(json);
}
Я добавляю путь к меню следующим образом:
private void AddToApiMenu(string testName, string filePath)
{
Form1 frm = new Form1();
foreach (ToolStripMenuItem item in Form1.menuStrip.Items)
{
if (item.Text == "Saved Tests")
{
foreach (ToolStripMenuItem subitem in item.DropDownItems)
{
if (subitem.Text == "Current Api Key")
{
ToolStripMenuItem newItem = new ToolStripMenuItem();
newItem.Name = testName;
newItem.Text = testName;
newItem.Tag = filePath;
newItem.Click += new EventHandler(frm.MenuItemClickHandler);
subitem.DropDownItems.Add(newItem);
}
}
}
}
}
Используя это событие нажатия пункта меню,Я открываю файл следующим образом:
using (StreamReader r = new StreamReader(filePath))
{
json = r.ReadToEnd();
testCall = JsonConvert.DeserializeObject<TestModel>(json);
}
Это место, где / когда я получаю сообщение об ошибке.
Кто-то запросил увидеть полный код обработчика события, вот он:
public void MenuItemClickHandler(object sender, EventArgs e)
{
ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
string filePath = clickedItem.Tag.ToString();
string jsonFile;
if(filePath.Contains("Sequences"))
{
OpenSequence frm = new OpenSequence(filePath);
frm.Show();
FormState.PreviousPage = this;
}
else if(filePath.Contains("Tests"))
{
OpenTest openTest = new OpenTest(filePath);
openTest.Show();
FormState.PreviousPage = this;
}
else if(filePath == "mFile")
{
DialogResult result = openFileDialog1.ShowDialog();
dynamic call;
if (result == System.Windows.Forms.DialogResult.OK)
{
jsonFile = Path.GetFullPath(openFileDialog1.FileName);
if(jsonFile != null)
{
using (StreamReader r = new StreamReader(jsonFile))
{
jsonFile = r.ReadToEnd();
call = JsonConvert.DeserializeObject<dynamic>(jsonFile);
}
if(call.SequenceName != null)
{
OpenSequence frm = new OpenSequence(openFileDialog1.FileName);
frm.Show();
FormState.PreviousPage = this;
}
else if(call.MethodName !=null)
{
OpenTest openTest = new OpenTest(openFileDialog1.FileName);
openTest.Show();
FormState.PreviousPage = this;
}
}
}
}
}
Есть ли что-то, что я должен / могу сделать после выполнения file.Write
, чтобы сделать этот файл немедленно доступным из полосы меню без получения не найденного исключения?
Любая помощьс благодарностью.