PDA

Просмотр полной версии : Создать файл с русскими буквами в названии



aaaSashaMGGU
12.04.2024, 13:56
Добрый день!
Как создать файл "МойФайл.txt" в папке "\home" с содержимым "йцукенqwerty123456"?
Спасибо!

P.S.
Без русских букв в имени файла - всё работает
Русские буквы в содержимом файла - работают

Тестовый код сейчас примерно такой:

//Создание
R_Trig_Main(CLK := CreateFile);
IF R_Trig_Main.Q THEN

TextForFile := OSU.UNICODE_TO_CP1251("йцукенqwerty123456");
FileName := OSU.UNICODE_TO_CP1251("/home/МойФайл.txt");



hFile := SysFile.SysFileOpen(FileName, SysFile.ACCESS_MODE.AM_WRITE, pResult);
SysFile.SysFileWrite(hFile, ADR(TextForFile), TO_UDINT(LEN(TextForFile)), pResult);
SysFile.SysFileClose(hFile);
END_IF

aaaSashaMGGU
12.04.2024, 14:35
Разобрался. Если кому надо, то вот:


PROGRAM File
VAR
CreateFile: BOOL;
R_Trig_Main: R_Trig;

pResult : POINTER TO SysFile.SysTypes.RTS_IEC_RESULT;
hFile : POINTER TO SysFile.SysTypes.RTS_IEC_HANDLE;

TextForFile : STRING(255);
FileNameWString : WSTRING(255);
FileNameString : STRING(255);
END_VAR


//Создание
R_Trig_Main(CLK := CreateFile);
IF R_Trig_Main.Q THEN

//Содержимое
TextForFile := OSU.UNICODE_TO_CP1251("йцукенqwerty123456");

//Имя файла
FileNameWString := "/home/МойФайл.txt";
STU.ConvertUTF16toUTF8(ADR(FileNameWString), ADR(FileNameString), SIZEOF(FileNameString), FALSE);

//Создание файла
hFile := SysFile.SysFileOpen(FileNameString, SysFile.ACCESS_MODE.AM_WRITE, pResult);
SysFile.SysFileWrite(hFile, ADR(TextForFile), TO_UDINT(LEN(TextForFile)), pResult);
SysFile.SysFileClose(hFile);
END_IF

Разве что, Putty всё равно вместо файла показывает "???????.txt", но оно мне в Putty смотреть особо и не надо