Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
1

Найти файл и вывести его размер

18.07.2013, 02:15. Показов 1692. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не работает пример с книжки Флёнова "Библия Делфи". Нужно, чтобы программа нашла указанный в Edit1 файл и, по нажатию кнопки, вывела его размер в Edit2.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  SearchRec: TSearchRec;
begin
  if FindFirst(Edit1.Text, faAnyFile, SearchRec)=0 then
     Edit2.Text:=IntToStr(SearchRec.Size)+'байт';
  FindClose(SearchRec);
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 02:15
Ответы с готовыми решениями:

Создать файл и вывести его размер страницы памяти
Здравствуйте! Помогите с решением такого вопроса по командной строке: создать файл и вывести его...

Если файл существует, вывести красным цветом в центре экрана его размер и дату создания
Ввести с клавиатуры имя файла; если он существует, вывести красным цветом в центре экрана его...

Определить размер файла А, если файл пуст то удалить его, иначе вывести 100 байтов содержимого на экран
Определить размер файла А, Если файл пуст то удалить его, иначе вывести 100 байтов содержимого на...

Найти файл в папке и вывести его расширение
Здравствуйте. Как нужно доделать bat-файл? Нужно создать командный файл, выполняющий проверку...

21
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,250
18.07.2013, 02:25 2
Значит файла с таким именем нет.
0
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 02:36  [ТС] 3
Я создавал файл.
Ещё вот другая программа. Запоминает расположение окна с последнего запуска и при последующем запускает его в том же положении. И она тоже не работает, хотя код правильный.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  WindowsSize = record
  Left, Top, Width, Height: Integer;
end;
  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
ws: WindowsSize;
f: TFileStream;
Str: String;
 
begin
 
  ws.Left:=Left;
  ws.Top:=Top;
  ws.Width:=Width;
  ws.Height:=Height;
 
  f:=TFileStream.Create('size.dat', fmCreate);
  f.Write(ws, sizeof(ws));
  f.Free;
 
end;
 
procedure TForm1.FormShow(Sender: TObject);
var
  ws:WindowsSize;
  fs:TFileStream;
begin
   if FileExists('size.dat') then
    begin
     fs:=TFileStream.Create('size.dat', fmOpenRead);
     fs.Read(ws, sizeof(ws));
     fs.Free;
 
     Left:=ws.Left;
     Top:=ws.Top;
     Width:=ws.Width;
     Height:=ws.Height;
    end;
end;
 
end.
Я думаю, может в настройках делфи где проблема. В объектном инспекторе или так где...
0
angstrom
18.07.2013, 02:47 4
Во всём виноват Дельфи, а может всё-таки нет?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
type  
  WindowsSize = record
    Left, Top, Width, Height : Integer;
  end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  ws:WindowsSize;
  fs:TFileStream;
begin
  if FileExists('size.dat') then
  begin
    fs := TFileStream.Create('size.dat', fmOpenRead);
    fs.Read(ws, SizeOf(ws));
    fs.Free;
 
    Left   := ws.Left;
    Top    := ws.Top;
    Width  := ws.Width;
    Height := ws.Height;
  end;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  ws : WindowsSize;
  f  : TFileStream;
begin
  ws.Left   := Left;
  ws.Top    := Top;
  ws.Width  := Width;
  ws.Height := Height;
 
  f := TFileStream.Create('size.dat', fmCreate);
  f.Write(ws, SizeOf(ws));
  f.Free;
end;
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,250
18.07.2013, 02:55 5
Цитата Сообщение от Vegas_I Посмотреть сообщение
Я создавал файл.
Где (в каком каталоге) создавал? Где (в каком каталоге) ищешь?
0
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 03:01  [ТС] 6
В папке с программой и создавал. В ней и ищу (никаких путей не указывал, только имя и разрешение).
Вообще, обе программы запускаются без ошибок, но то, что нужно, не выполняют.
0
angstrom
18.07.2013, 03:08 7
Цитата Сообщение от Vegas_I Посмотреть сообщение
но то, что нужно, не выполняют
Неужели? Приведённый мною код работает. Запоминает состояние формы и восстанавливает.
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,250
18.07.2013, 03:27 8
Цитата Сообщение от Vegas_I Посмотреть сообщение
В папке с программой и создавал. В ней и ищу (никаких путей не указывал, только имя и разрешение).
Проверь где именно ищешь:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  SearchRec: TSearchRec;
begin
  ShowMessage(GetCurrentDir);
  if FindFirst(Edit1.Text, faAnyFile, SearchRec)=0 then
     Edit2.Text:=IntToStr(SearchRec.Size)+'байт';
  FindClose(SearchRec);
end;
0
Заблокирован
18.07.2013, 03:31 9
Да ещё один ламер наверняка с XE, только думает что он нуб, а на деле тут думать не надо - тупо в папку с программой заглянуть и в свойства проекта чтобы посмотреть где реально рабочая папка будет и куда реально рабочий exe пойдёт.

Проверь это в 0 приближении:
Подключение к базе данных
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,250
18.07.2013, 03:59 10
Цитата Сообщение от Dr_Quake Посмотреть сообщение
наверняка с XE
Да наверняка. Я и забыл что в ХЕ с путями черт ногу сломит пока не привыкнет.
0
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 11:54  [ТС] 11
Цитата Сообщение от northener Посмотреть сообщение
Проверь где именно ищешь:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  SearchRec: TSearchRec;
begin
  ShowMessage(GetCurrentDir);
  if FindFirst(Edit1.Text, faAnyFile, SearchRec)=0 then
     Edit2.Text:=IntToStr(SearchRec.Size)+'байт';
  FindClose(SearchRec);
end;
Всё, с этим разобрался. Когда указываешь имя файла, то и разрешение вводить тоже нужно. Тогда работает. Сори, ступил)

Добавлено через 2 минуты
angstrom, я заменил formshow на formcreate. Ничего не меняется. вот что у меня сейчас:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  WindowsSize = record
   Left, Top, Width, Height: integer;
   end;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
var
  ws:WindowsSize;
  fs:TFileStream;
begin
  if FileExists('size.dat') then
  begin
    fs := TFileStream.Create('size.dat', fmOpenRead);
    fs.Read(ws, SizeOf(ws));
    fs.Free;
 
    Left   := ws.Left;
    Top    := ws.Top;
    Width  := ws.Width;
    Height := ws.Height;
  end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  ws: WindowsSize;
  f: TFileStream;
  Str: String;
begin
 ws.Left:=Left;
 ws.Top:=Top;
 ws.Width:=Width;
 ws.Height:=Height;
 
 f:=TFileStream.Create('size.dat', fmCreate);
 f.Write(ws, sizeof(ws));
 f.Free;
end;
 
end.
0
angstrom
18.07.2013, 11:56 12
Я проверял на Дельфи 7 по WinXP, всё отрабатывает.
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 12:02  [ТС] 13
Цитата Сообщение от angstrom Посмотреть сообщение
Я проверял на Дельфи 7 по WinXP, всё отрабатывает.
У меня на 7-ка винда
0
angstrom
18.07.2013, 12:15 14
Проверил на Win7, работает.
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 12:17  [ТС] 15
Ну а что тогда?
0
angstrom
18.07.2013, 12:30 16
Создай минимальный проект, только с этим кодом и проверь.

Добавлено через 1 минуту
Файл size.dat создаётся?
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,250
18.07.2013, 13:15 17
Цитата Сообщение от Vegas_I Посмотреть сообщение
Ну а что тогда?
Пришла пора познакомиться с отладчиком и научиться его использовать. Клавиши F5, F9, F7 и F8 позволят найти причину неработоспособности программы гораздо быстрее чем любой форум.
0
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 15:34  [ТС] 18
Цитата Сообщение от angstrom Посмотреть сообщение
Создай минимальный проект, только с этим кодом и проверь.

Добавлено через 1 минуту
Файл size.dat создаётся?
Нет. Не создаётся
0
angstrom
18.07.2013, 16:24 19
Вероятно не хватает прав для этого.
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.07.2013, 17:40  [ТС] 20
Цитата Сообщение от angstrom Посмотреть сообщение
Вероятно не хватает прав для этого.
А поподробнее? Как установить эти права?
0
18.07.2013, 17:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 17:40
Помогаю со студенческими работами здесь

Поток: открыть любой файл, определить его размер и занести в новый файл
очень нужно решить две задачи 1.Создать поток открывающий любой файл,определить его размер и...

Как найти слово в файле и вывести его в другой файл?
Написал код, но файл не выводится, в чём ошибка? #include <fstream> #include <iostream>...

В опредленном каталоге найти самый большой файл и вывести его имя
Имеется задания, в опредленном каталоге найти самый большой файл и вывести его. Нашел вывел, с...

Найти в файле самое длинное слово и вывести его на экран и в новый файл
Помогите если не сложно) Дан текстовый файл. Найти в нём самое длинное слово и вывести его на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru