Что нового

FileWrite не записывает Английские и Русские буквы в файл (только цифры)

gergerger111

Новичок
Сообщения
17
Репутация
0
Есть список файлов txt (имена которых формируются в боксе 1)
Была задача создать добавить из бокса 1 в бокс 2 имена файлов
И сформировать в ТХТ формате список имён файлов из (бокса 2)

Проблема заключается в том что если в имени файлов ТХТ формата (бокс 1) есть Рус-Англ буквы он не добовляется

Попробовал все кодировки из функции FileOpen (все равно не сохраняет)

В коде есть пути на диск Д и пути к тестовым файлам формата ТХТ (можно поменять на свой)

Код:
#include <GuiListBox.au3>
#include <GUIConstantsEx.au3>
#include <FileOperations.au3>
Global $sItems

HotKeySet ("{ESC}", "ESC")

$Debug_LB = False 
	$rWin2 = GUICreate("Test", 600, 296)
	$Input1 = GUICtrlCreateInput('', 10, 5, 360, 20)
	$add = GUICtrlCreateButton ("  add  ", 265, 50)
	$del = GUICtrlCreateButton ("  del  ", 265, 100)
	$save = GUICtrlCreateButton (" save ", 265, 150)
	$new = GUICtrlCreateButton ("Новый", 262, 200)
	$hListBox = GUICtrlCreateList("", 2, 52, 256, 196)
	$hListBox2 = GUICtrlCreateList("", 307, 52, 256, 196)
	GUISetState()

	; Добавляет файл
	_GUICtrlListBox_Dir ($hListBox, "D:\555\*.txt")
	; Цикл выполняется, пока окно не будет закрыто
	While 1
	 	$msg = GUIGetMsg($rWin2)
	Switch $msg
	  	Case $GUI_EVENT_CLOSE
	   $msg = $GUI_EVENT_CLOSE
	   ExitLoop
	Case $add
	  $zz =   _GUICtrlListBox_GetCurSel($hListBox)
;~ 	 $gg = _GUICtrlListBox_GetText($hListBox, $zz)
	  $zzz = GUICtrlRead ($hListBox)
	  $gh = 'ADD:\s(.*?)'
	  If StringRegExp($zzz, $gh, 1) = 0 And $zzz <> "" Then
;~    	  MsgBox (0, "", $zzz)
	  _GUICtrlListBox_AddString ($hListBox2, $zzz)
	  _GUICtrlListBox_ReplaceString($hListBox, $zz, "ADD: " & $zzz)
;~ 	_GUICtrlListBox_AddString ($hListBox2, $zzz)
Else
;~ 	  MsgBox (0, "", "NO")
   EndIf
      Case $del
		 $zzz2 = GUICtrlRead ($hListBox2)
		 $rz = "ADD: " & $zzz2
		 $in = _GUICtrlListBox_FindString($hListBox, $rz, True)
		 _GUICtrlListBox_ReplaceString ($hListBox, $in, $zzz2)
		 $in2 = _GUICtrlListBox_FindInText ($hListBox2, $zzz2)
		 _GUICtrlListBox_DeleteString($hListBox2, $in2)
;~ 	     MsgBox (0, "", "nice")

Case $save
   $imp = GUICtrlRead ($Input1)
     If FileExists("D:\" & $imp & ".txt") Then
	  If MsgBox(4 + 32, 'Файл уже существует', 'Пересохранить?') = 6 Then
    MsgBox(4096, '', '"Да"')
   If $imp <> "" Then
   $hFile = FileOpen("D:\" & $imp & ".txt", 16384)
   $Co = _GUICtrlListBox_GetCount($hListBox2)
   For $hh = 0 To $Co
   $hh2 = _GUICtrlListBox_GetText($hListBox2, $hh)
   If $hh2 <> 0 Then FileWrite($hFile, $hh2 & @CRLF)
   Next
Else
   MsgBox (16, "", "Error")
EndIf
Else
    MsgBox(16, '', '"Нет"')
 EndIf
 Else
	  If $imp <> "" Then
   $hFile = FileOpen("D:\" & $imp & ".txt", 138)
   $Co2 = _GUICtrlListBox_GetCount($hListBox2)
   For $hh = 0 To $Co2
   $hh2 = _GUICtrlListBox_GetText($hListBox2, $hh)
    MsgBox (16, "", $hh2)
   If $hh2 <> 0 Then FileWrite ($hFile, $hh2 & @CRLF)
   Next
Else
   MsgBox (16, "", "Error")
EndIf
 EndIf

 Case $new
	GUICtrlDelete ($hListBox2)
	GUICtrlDelete ($hListBox)
	Global $hListBox = GUICtrlCreateList("", 2, 52, 256, 196)
	_GUICtrlListBox_Dir ($hListBox, "D:\555\*.txt")
    Global $hListBox2 = GUICtrlCreateList("", 307, 52, 256, 196)
     GUICtrlSetData ($Input1, "")

EndSwitch
	WEnd
	GUIDelete()

Func ESC ()
 Exit
 EndFunc

[/quote]
 
Автор
G

gergerger111

Новичок
Сообщения
17
Репутация
0
Может быть я не так мысль изложил ?
Или мой код с ошибкой ?
 

joiner

Модератор
Локальный модератор
Сообщения
3,393
Репутация
594
я не совсем понял
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    24.9 КБ · Просмотры: 13
Автор
G

gergerger111

Новичок
Сообщения
17
Репутация
0
joiner сказал(а):
я не совсем понял

Проблема следующая:
Добавляем имя файла из бокса 1 в бокс 2
Придумываем имя файла
Нажимаем кнопку сохранить
Получаем TXT файл с именами файлов из бокса 2
И видим что он сохраняет только имена содержащие одни цифры если есть рус-анг буква этих имён в списке нет.
 

gunter123

Продвинутый
Сообщения
159
Репутация
67
Странно, у меня скрипт сработал нормально. Попробуйте флаг 34 и/или #RequireAdmin в начале скрипта.
 
Автор
G

gergerger111

Новичок
Сообщения
17
Репутация
0
gunter123 сказал(а):
Странно, у меня скрипт сработал нормально. Попробуйте флаг 34 и/или #RequireAdmin в начале скрипта.

У меня в бокс 2 все добавляется.
Файл который я называю test1 с расширением txt так же появляется.
Но список формируется только из цифровых названий (бокса 2) если
название будет тест или test то оно не добавиться в файл



Добавлено:
Сообщение автоматически объединено:

gunter123 сказал(а):
Странно, у меня скрипт сработал нормально. Попробуйте флаг 34 и/или #RequireAdmin в начале скрипта.

Добавил

Все равно выдаёт =(
 

Вложения

  • dbc25a397991089e5feb7ff3ffeccd8c.png
    dbc25a397991089e5feb7ff3ffeccd8c.png
    21.9 КБ · Просмотры: 4

gunter123

Продвинутый
Сообщения
159
Репутация
67
А если заменить блок Case $save на вот это? У меня это срабатывает нормально, тестировал на диске С:
Код:
Case $save
	  $imp = GUICtrlRead ($Input1)
	  If $imp = "" Then ContinueLoop				; Если строка файла пустая, ничего не делаем
	  If FileExists("D:\" & $imp & ".txt") AND (MsgBox(36, 'Файл уже существует', 'Пересохранить?') <> 6) Then ContinueLoop ; Если файл существует и пользователь отказался перезаписать его, дальше ничего не делаем
	  $hFile = FileOpen("D:\" & $imp & ".txt", 34)
	  $Co = _GUICtrlListBox_GetCount($hListBox2)
	  For $hh = 0 To $Co -1
		 $hh2 = _GUICtrlListBox_GetText($hListBox2, $hh)
		 FileWrite($hFile, $hh2 & @CRLF)
		 MsgBox(4096, "", $hh2)
	  Next
 
Автор
G

gergerger111

Новичок
Сообщения
17
Репутация
0
gunter123 сказал(а):
А если заменить блок Case $save на вот это? У меня это срабатывает нормально, тестировал на диске С:
Код:
Case $save
	  $imp = GUICtrlRead ($Input1)
	  If $imp = "" Then ContinueLoop				; Если строка файла пустая, ничего не делаем
	  If FileExists("D:\" & $imp & ".txt") AND (MsgBox(36, 'Файл уже существует', 'Пересохранить?') <> 6) Then ContinueLoop ; Если файл существует и пользователь отказался перезаписать его, дальше ничего не делаем
	  $hFile = FileOpen("D:\" & $imp & ".txt", 34)
	  $Co = _GUICtrlListBox_GetCount($hListBox2)
	  For $hh = 0 To $Co -1
		 $hh2 = _GUICtrlListBox_GetText($hListBox2, $hh)
		 FileWrite($hFile, $hh2 & @CRLF)
		 MsgBox(4096, "", $hh2)
	  Next

Спасибо большое все заработало)
 
Верх