Одесса: 2°С (вода 8°С)
Киев: 0°С
Львов: -2°С

Тема: проблемы с поиском файлов с русскими именами

Ответить в теме
Показано с 1 по 1 из 1
  1. Вверх #1

    По умолчанию проблемы с поиском файлов с русскими именами

    пишу на дэльфях прогу автозапуска на флэшку, которая бы автоматически писала в desktop.ini тот файл background-картинку, который соответствует разрешению экрана. проблема при поиске этих desktop.ini на флэшке. возможно проблема в русскоязычных именах папок или в длине пути поиска... вот мой код:
    program autorun;

    {$APPTYPE CONSOLE}

    uses
    Windows,
    SysUtils,
    Classes,
    Forms,
    IniFiles;

    procedure WriteResolutionToIni(const FileName: string);
    var
    Data: TIniFile;
    begin
    Data:=TIniFile.Create(FileName);
    try
    Data.WriteString('{BE098140-A513-11D0-A3A4-00C04FD706EC}',
    'IconArea_Image',
    'background.'+IntToStr(Screen.Width)+'x'+IntToStr( Screen.Height)+'.jpg');
    finally
    Data.Free;
    end;
    end;

    function LowerCase(const S: string): string;
    asm
    push ebx
    push esi
    push edi
    mov esi, eax
    mov eax, edx
    test esi, esi
    jz @Nil
    mov edx, [esi-4]
    mov edi, eax
    test edx, edx
    jle @Nil
    mov ecx, [eax]
    mov ebx, edx
    test ecx, ecx
    jz @Realloc
    test edx, 3
    jnz @Length3
    xor edx, [ecx-4]
    cmp edx, 3
    jbe @TestRef
    jmp @Realloc
    @Length3:
    or edx, 2
    xor edx, [ecx-4]
    cmp edx, 1
    ja @Realloc
    @TestRef:
    cmp [ecx-8], 1
    je @LengthOK
    @Realloc:
    mov edx, ebx
    or edx, 3
    call [email protected]
    @LengthOK:
    mov edi, [edi]
    mov [edi-4], ebx
    mov byte ptr [ebx+edi], 0
    add ebx, -1
    and ebx, -4
    mov eax, [ebx+esi]

    @Loop: mov ecx, eax
    or eax, $80808080
    mov edx, eax
    sub eax, $5B5B5B5B
    xor edx, ecx
    or eax, $80808080
    sub eax, $66666666
    and eax, edx
    shr eax, 2
    xor eax, ecx
    mov [ebx+edi], eax
    mov eax, [ebx+esi-4]
    sub ebx, 4
    jge @Loop

    pop edi
    pop esi
    pop ebx
    ret

    @Nil: pop edi
    pop esi
    pop ebx
    jmp [email protected]
    end;

    procedure ScanFile(const f: string);
    begin
    if (LowerCase(ExtractFileName(f)) = 'desktop.ini') then
    begin
    writeln(f);
    //WriteResolutionToIni(f);
    end;
    end;

    procedure ScanDir(d: string);
    var
    sr: tsearchrec;
    f: string;
    begin
    if findfirst(d+'\*.*',faanyfile,sr) <> 0 then
    findclose(sr)
    else
    repeat
    f:=d+'\'+sr.name;
    if sr.attr <> fadirectory then
    begin
    ScanFile(f);
    end
    else
    begin
    if (sr.name <> '.') and (sr.name <> '..') then
    ScanDir(f);
    end;
    until findnext(sr) <> 0;
    findclose(sr);
    end;


    var
    list: TStringList;
    i: integer;
    s: string;

    begin
    list:=TStringList.Create;
    list.LoadFromFile(ExtractFilePath(ParamStr(0))+'au torun.txt');
    for i:=0 to list.Count-1 do
    begin
    s:=list[i];
    if (s[1] <> ';') and (s[1] <> '/') and (s[2] <> '/') then
    begin
    s:=ExtractFilePath(ParamStr(0))+s;
    writeln(s);
    WinExec(PChar(s),SW_NORMAL);
    end;
    end;
    list.Free;
    s:=ExtractFilePath(ParamStr(0));
    Delete(s,length(s),1);
    ScanDir(s);
    readln;
    end.

    пожалуйста - помогите мне с этим.


Ответить в теме

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения