Функция открытия файла и считывания текста в listBox. Подскажите как её переделать, что бы она не ругалась на русские названия папок в пути к файлу. Спасибо. #include <io.h>
#include <stdio.h>
#include <fcntl.h>
#include <share.h>
#include <stdlib.h>
#include <vcclr.h>
using namespace System::IO;
using namespace System::Text;
private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e)
{
mark1:
Stream ^s;
this->DialogResult = System::Windows::Forms::DialogResult::OK;
if(this->openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
if((s = this->openFileDialog1->OpenFile()) != nullptr)
{
String ^a = this->openFileDialog1->FileName;
LoadFromFile(StrToChar(a), this->listBox1); //StrToChar() - вынесенная функция;
}
else
{
MessageBox::Show("Error file open 2");
goto mark1;
}
}
}
void LoadFromFile(char *File, ListBox ^lb)
{
char s[300];
FILE *fp;
int i = 0;
lb->Items->Clear();
if(!(fp = fopen(File, "r")))
{
MessageBox::Show("Error file open 1", "Attention", MessageBoxButtons::OK);
return;
}
while(! feof(fp))
{
fgets(s, 300, fp);
String ^dd = gcnew String(s);
dd = dd->Substring(0, (dd->Length-1));
lb->Items->Add(dd);
i++;
}
}
char *StrToChar(String ^str)
{
cli::pin_ptr<const> wch = PtrToStringChars(str);
size_t cоnvertedChars = 0;
size_t sizeInBytes = ((str->Length + 1)*2);
char *ch = (char *) malloc(sizeInBytes);
errno_t err = 0;
err = wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes); //возвращает 1 при ошибке;
if(err != 0) MessageBox::Show("wcstombs_s failed!\n");
return(ch);
}