РЕДАКТИРОВАТЬ: Оказывается, проблема в том, что в iosfwd выдает исключение в строке 506:
Исключение: нарушение прав записи._Left был 0xCCCCCCCC.
Чтобы ответить: Как исправить: Возникло исключение: нарушение прав записи._Left был 0xCCCCCCCC
Я делаю программу, в которой она запускает другую программу в том же каталоге, которая обновляет текстовый файл с помощью ShellExecute.
Программа начинается с получения строкииспользуя getline
, а затем использует ShellExecute
для запуска другой программы, которая использует fstream
для обновления файла.Вот соответствующая часть программы:
cout << "Please enter Program Name:" << endl;
getline(cin.ignore(), a);
system("cls");
os.open("tempstring.txt");
os << a;
os.close();
LPCSTR filename = "NewProgScript.exe";
LPCSTR Location = NULL;
ShellExecute(NULL, "open", filename, NULL, Location, SW_SHOWNORMAL);
/*>> >> >> >> >> rest is irrelevant << << << << << <<*/
bool end = false;
do
{
system("cls");
is.open("tempdone.txt");
is >> x;
is.close();
if (x == 1) { end = true; }
if (x == 2) { os.open("tempdone.txt"); os << 0; os.close(); Errors Err; Err.Error(41); }
cout << "Please wait while Files Update." << endl;
Sleep(1000);
} while (end == false);
"NewProgScript.exe
" запускается здесь.NewProgScript.exe код:
#include "pch.h"
#include <fstream>
#include <string>
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
ofstream os;
ifstream is;
string a, nouse;
string Progs[20];
is.open("tempstring.txt");
getline(is, nouse);
is.close();
cout << "UPDATING DATABASE.. DO NOT EXIT!" << endl;
string name, ending, end;
ending = ".txt";
name = "Prog";
for (int count = 1; count < 20 + 1; count++)
{
end = name + to_string(count) + ending;
is.open(end);
getline(is, Progs[count]);
is.close();
}
for (int count = 1; count < 20 + 1; count++)
{
end = name + to_string(count) + ending;
if (Progs[count] == "NULL")
{
os.open("end");
os << nouse;
os.close();
os.open("tempdone.txt");
os << 1;
os.close();
Sleep(500);
exit(EXIT_SUCCESS);
}
}
os.open("tempdone.txt");
os << 2;
os.close();
}
Проблема заключается в том, что когда этот модуль запуска запускается на ранних этапах использования ShellExecute
, он не обновляет файл "tempdone.txt". Однако он работает, когда я вручную нажимаю на кнопку открыть егоexternaly.Как я могу это исправить?
PS: извините за очень длинный пост!Также мне жаль, что я делаю глупые или наивные ошибки, я еще не очень хорош: /