не видет каталоги с русскими символами при поиске с

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
svsd_val
незнакомец
Сообщения: 9
Зарегистрирован: 12.02.2011 11:04:45

не видет каталоги с русскими символами при поиске с

Сообщение svsd_val »

Код: Выделить всё

uses sysutils;

Procedure ListDir(CurDir:String);
var
  F : TSearchRec;
begin
  if FindFirst(CurDir+'*.*', faAnyFile, F ) = 0 then
    repeat
     writeln('->',curdir+F.name);
    until FindNext(F)<>0;
  FindClose(F);
end;

begin
 ListDir('/home/user/');
end.


выводит всё , кроме каталогов с русскими буквами , и также если искать в каталоге с русским буквами не видет другие подкаталоги =(((

что делать ?! :?: :!:

------
проверил , он даже обыкновенные каталоги невидет =( только те в которых есть '.' например '.opera' =((((
Kubanych
новенький
Сообщения: 73
Зарегистрирован: 15.10.2008 10:02:18

Сообщение Kubanych »

Сделай так:

Код: Выделить всё

    uses sysutils;

    Procedure ListDir(CurDir:String);
    var
      F : TSearchRec;
    begin
      if FindFirst(CurDir+'*', faAnyFile, F ) = 0 then
        repeat
         writeln('->',curdir+SysToUtf8(F.name));
        until FindNext(F)<>0;
      FindClose(F);
    end;

    begin
    ListDir('/home/user/');
    end.

Смотри также пример из моей книги "Основы программирования в среде Lazarus", стр. 659.
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

Смотри также пример из моей книги "Основы программирования в среде Lazarus", стр. 659.


Не сохранилось ли у вас исходников книги? В html на ПК читать удобнее.
svsd_val
незнакомец
Сообщения: 9
Зарегистрирован: 12.02.2011 11:04:45

Сообщение svsd_val »

Kubanych
Ага, рабит, Спасибо =)
однако недолго думая решил пойти другим путём, который тоже работает ^_^

Код: Выделить всё

Procedure ListDir(CurDir:String);
Var _Dir  : PDir;
      _Dirent : PDirent;
begin
  _Dir := fpOpenDir(curdir);
  Repeat
    _Dirent := fpReadDir (_Dir^);
    If _Dirent<>Nil then
       WriteLn( pchar(@_Dirent^.d_name[0]) );
  Until _Dirent=Nil;
  fpCloseDir (_Dir^);
end;
Ответить