Я не совсем знаком с тем, как работает CLI, но у меня есть общее представление.У меня есть функция, которая принимает 2 переменные System :: String и использует их для загрузки файла с веб-страницы.Что касается загрузки, она работает нормально, и в моем каталоге появляется файл с необходимым содержимым.Тем не менее, это дает мне ошибку
Произошло необработанное исключение типа 'System.AccessViolationException' в ParseLinks.exe
void downloadFile(System::String ^_URL, System::String ^_saveAs)
{
try
{
System::Net::WebClient ^webClient = gcnew System::Net::WebClient();
// Downloads the resource with the specified URI to a local file.
webClient->DownloadFile(_URL, _saveAs);
webClient->Dispose();
}
catch (System::Exception ^_e)
{
// Error
System::Console::WriteLine("Exception caught in process: {0}", _e);
}
}
Я провел некоторое копание и тестирование выводаи обнаружил, что исполняемый файл достигает точки останова где-то в текстовом файле, поскольку вся веб-страница не сохранена в текстовый файл.
Соответствующий код для этого:
if (myFile.is_open()) //if file open
{
while (!myFile.eof()) //before end of file
{
getline(myFile, ln);
lines[count] = ln;
count++; //count total lines to set loop length for later parsing
//Error occurs somewhere in here
}
myFile.close();
}
else
cout<<"Error: Could not access file\n";
Совершенно новая ошибка!: (
Необработанное исключение типа 'System.Runtime.InteropServices.SEHException' произошло в ParseLinks.exe
Код после файла -> цикл массива строк
myFile.close(); //Close txt file
//Loop through lines
for (int i = 0; i < count; i++)
{
string temp = parseLinks(lines[i]); //parse links from each line
Функция для этого:
string parseLinks(string str)
{
const int len = str.length();
string link;
bool quotes = false, islink = false;
string compare[5] = {".htm",".html",".php",".asp",".pdf"};
//Parse all quoted text
for (int i = 0; i != len; i++)
{
//Change bool if quote found
if (str[i] == '"')
{
if (quotes == false)
quotes = true;
else
quotes = false;
}
//If bool true, and char is not a quote, add to link string
if (quotes == true && str[i] != '"')
link += str[i];
}
//Discard non-link text
for (int i = 0; i < 5; i++)
{
//Link check for links given array of path filetypes
if (link.compare((link.length() - compare[i].length()),compare[i].length(),compare[i]) == 0)
islink = true;
}
//Link check for links with no path filetype (.html, .php, etc.)
if (link.compare(0,7,"http://") == 0)
islink = true;
//If not a link, return empty string
if (islink == false)
link = "";
return link;
}
Ошибка указывает на мое большое выражение сравнения в этой функции. (Кроме того, я явно ужасно сжимаю свой код)