Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 03:36 Geo
 
 
Во Флориде и в Королевстве сейчас  03:41[Войти] | [Зарегистрироваться]
Ответ на вопрос № 50614

Вопросы с аналогичными сообщениями об ошибках:
  • Access is denied (26)

    29-03-2007 08:56
    Дорогие программисты не могу понять в чем дело.
    Есть код:

    var i,z,x:integer;
    size:Longint;
    f:file of Byte;
    item:TListItem;
    begin
    memo1.Clear;
    x:= ListView1.Items.Count - 1;
    for i := 0 to listView1.items.count -1  do begin
    item := ListView1.Items[i];
    try
    AssignFile(f,item.Caption);
    reset(f);
    size := filesize(f);
    memo1.Lines.Add(IntToStr(size));
    finally
    closefile(f);
    end;
    end;
      end;

    вроде все нормально начинает работать, но под конец списка ругается на reset(f); пишет что " File access denied". Как ни крутил все равно. Подскажите пожалуйста в чем дело?

    [+] Добавить в избранные вопросы

    Отслеживать ответы на этот вопрос по RSS

    Ответы:


    Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
    Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

    02-01-2008 07:14 | Комментарий к предыдущим ответам
    >>> полюбому надо использовать оба варианта
    В случае отсутствия прав на чтение не совсем понятен смысл получения размера файла - ведь это число не просто распечатать на принтере надо, а как-то использовать, посчитать занимаемое место на диске, например.

    27-12-2007 08:48 | Комментарий к предыдущим ответам
    кстати, у пользователя может и не быть права на чтение файла, но быть право на просмотр каталога...
    полюбому надо использовать оба варианта!

    17-12-2007 13:16 | Комментарий к предыдущим ответам
    >>> а реализация функции ничего не напоминает?
    Да, совсем забыл, в оригинальном модуле действительно так. Это мои проделки по доработке модуля, функция в котором теперь выглядит вот так:

    function GetFileSize(const FileName:string):Int64;
    var Stream:TFileStream;
    begin
      try
        Stream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
        Result:=Stream.Size;
        Stream.Free;
      except
        Result:=-1;
      end;
    end;


    05-12-2007 08:52 | Комментарий к предыдущим ответам
    а реализация функции ничего не напоминает?


    function GetFileSize(const FileName: string): LongInt;
    var
      SearchRec: TSearchRec;
    begin
      try
        if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
          Result := SearchRec.Size
        else Result := -1;
      finally
        SysUtils.FindClose(SearchRec);
      end;
    end;


    02-04-2007 14:31 | Комментарий к предыдущим ответам
    >>> то можно (и лучше) вообще сделать так
    Где-то я читал, что у пользователя может быть право на чтение файла и не быть прав на просмотр каталога (не знаю, правда или нет), тогда FindFirst функция обломится, тогда как штатно все-равно можно получить с помощью например function GetFileSize(const FileName: string): LongInt; из модуля fmxUtils.pas, поставляемого среди демок Delphi при стандартной установке.

    31-03-2007 04:18
    А зачем тут вообще FindFirst? Есть же FileExists.

    Автору ведь нужен размер файла, а FindFirst не только проверяет существование файла, но и возвращает атрибуты, в т.ч. и размер.

    30-03-2007 23:53
    А зачем тут вообще FindFirst? Есть же FileExists.

    30-03-2007 04:48
    Я немного неправильно написал вам код, чтобы не было утечек памяти, нужно так:

    var
      Rec: TSearchRec;
    begin
      if FindFirst(item.Caption,faAnyFile,Rec) = 0 then begin
        memo1.Lines.Add(IntToStr(Rec.Size));
      end
      else begin
        // Файл не найден или нет прав доступа
      end;
      FindClose(Rec); // В любом случае
    end;



    30-03-2007 04:18 | Сообщение от автора вопроса
    Спасибо Ins-у за совет на будущее:),теперь все прекрасно работает!Спасибо всем!

    29-03-2007 15:46
    1.

    if FileExist(item.Caption) then


    тебе поможет :)
    2. возможно просто нет прав на файл

    29-03-2007 10:33
    Странный у вас код:

    try
      AssignFile(f,item.Caption);
      reset(f);
      size := filesize(f);
      memo1.Lines.Add(IntToStr(size));
    finally
      closefile(f);
    end;


    Т.е если в строке reset(f) произойдет исключение, файл не будет открыт, управление передастся в блок finally - в строку closefile. И какой файл она должна будет закрыть, если он не был открыт??? Может стоит сначала проверять, существует ли файл (FileExist)?  И вообще, вот так делать правлильно:

    AssignFile...
    reset...
    try
      ...
    finally
      closefile...
    end;


    Совет на будущее - не используйте AssignFile, Reset и прочие устаревшие методы работы с файлами.

    var
      FS: TFileStream;
    begin
      FS:=TFileStream.Create(item.Caption,fmOpenRead);
      try
        memo1.Lines.Add(IntToStr(FS.Size));
      finally
        FS.Free;
      end;
    end;


    Если нужно узнать только размер файла, то можно (и лучше) вообще сделать так:

    var
      Rec: TSearchRec;
    begin
      if FindFirst(item.Caption,faAnyFile,Rec) = 0 then begin
        memo1.Lines.Add(IntToStr(Rec.Size));
        FindClose(Rec);
      end
      else begin
        // Файл не найден или нет прав доступа
      end;
    end;


    29-03-2007 09:23
    Посмотри в дебаггере, что находится в Item.Caption в конце списка - там, где возникает сообщение об ошибке.

    Добавьте свое cообщение

    Вашe имя:  [Войти]
    Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
    контрольный вопрос:
    Раз дощечка, два дощечка будет лесенка. Раз словечко, два словечко, будет ЧТО?
    в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
    Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
    Тип сообщения:
    Текст:
    Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Вопросы с аналогичными сообщениями об ошибках:
  • Access is denied (26)


    Страница избранных вопросов Круглого стола.
  •   
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования