4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247

Как проверить, существует ли файл и загрузить его в memo?

27.04.2012, 20:29. Показов 5641. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как проверить, существует ли файл, и если да, то нужно загрузить его в мемо
Делал так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
b := tstringlist.Create;
  a := tstringlist.Create;
  if fileexists ('a.txt') then
  begin
  pass.loadfromfile('a.txt');
  end
  else
  MessageDlg('Не удалось найти файл a.txt',mtError, [mbOK], 0);
  end;
  if fileexists ('b.txt') then
  begin
  uin.loadfromfile('b.txt');
  end
  else
  MessageDlg('Не удалось найти файл b.txt',mtError, [mbOK], 0);
  end;
...
Memo3.Lines.Add(a.Strings[i] + Edit3.Text + b.Strings[p]);
но по на вылезало куча ошибок
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2012, 20:29
Ответы с готовыми решениями:

Как проверить, существует ли файл в указанной дериктории?
Добрый день! Открываю файл следующим образом, чтобы вывести в Image1: Image1.Picture.LoadFromFile(img\фамилия.jpg) как...

Загрузить файл в memo
имеются 3 html файла(или текстовых) в одной папке, необходимо загрузить текст файла в TMemo или любой другой компонент работы с текстом,...

Загрузить текстовый файл в Memo
Задача состоит в том чтобы открыть текстовый файл в memo1. Но проблема в том, что имя текстового файла меняется от 1 до 100, т.е. в папке...

45
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 20:40
Если не разбираться подробнее, то строки 9 и 16 лишние - убрать.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 20:48  [ТС]
Цитата Сообщение от Одиночка Посмотреть сообщение
Если не разбираться подробнее, то строки 9 и 16 лишние - убрать.
Результат - выводит диалог, который должен выводиться после того, как выполниться код и файл запишется
Вот целый код
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
var
  i, p: integer;
  pass, uin: tstringlist;
begin
  pass := tstringlist.Create;
  uin := tstringlist.Create;
  if fileexists ('pass.txt') then
  begin
  pass.loadfromfile('pass.txt');
  end
  else
  MessageDlg('Íå óäàëîñü íàéòè ôàéë pass.txt',mtError, [mbOK], 0);
  if fileexists ('pass.txt') then
  begin
  uin.loadfromfile('UIN.txt');
  end
  else
  MessageDlg('Íå óäàëîñü íàéòè ôàéë UIN.txt',mtError, [mbOK], 0);
  for i := 0 to uin.Count - 1 do
  begin
    application.ProcessMessages;
    for p := 0 to pass.Count - 1 do
    begin
      Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[p]);
    end;
  end;
  if CheckBox1.Checked then
  begin
    Memo3.Visible := true;
  end;
  Memo3.Lines.SaveToFile('gen_uin_pass.txt');
  MessageDlg('Save to gen_uin_pass.txt',mtInformation, [mbOK], 0); //если убирать 9 и 16 строки, то выводиться вот это
  pass.Free;
  uin.Free;
  end;
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:10
Строка 13: наверное должно быть:
Delphi
1
if fileexists ('uin.txt') then
Потом, у тебя после сообщения: 'Не удалось найти файл UIN.txt' всё равно продолжает объединять файлы. Стоит наверное сделать так:
Delphi
1
2
3
4
begin
  MessageDlg('Не удалось найти файл UIN.txt',mtError, [mbOK], 0);
  exit;
end;
И, как я понимаю, тебе нужно объединить эти 2 файла в Memo. Тогда нужно делать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
p:=pass.Count;
k:=uin.Count;
i:=p;
if p<k then i:=k;
 
for i := 0 to i - 1 do
begin
  application.ProcessMessages;
  if ((i<k) and (i<p)) then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) else
  if i<k then
  Memo3.Lines.Add(pass.Strings[i]) else
  Memo3.Lines.Add(uin.Strings[i]);
end;
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:35  [ТС]
Объединяется вроде бы нормально
Я хочу сделать следующее:
Пользователь наживает кнопку, программа проверяет, существует ли файл, если да, то проверяет, существует ли другой файл и если всё хорошо - выполняет код дальше, а если на одном из этапов проверки файл не нашёлся - выдать соответствующую ошибку. Потом, если пользователь ещё раз нажмёт кнопку - начать всё с начала
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:41
Значит, правильно:
Delphi
1
2
3
4
begin
  MessageDlg('Не удалось найти файл UIN.txt',mtError, [mbOK], 0);
  exit;
end;
И по второму файлу тоже.
Ну и перед циклом объединения, наверное, нужно вставить:
Delphi
1
Memo3.Lines.Clear;
1
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:43  [ТС]
Так exit; - это ж вроде бы выходи из программы, не?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:45
И выход из процедуры/функции тоже. Если находишься в процедуре или функции.
А из программы, вообще-то, выход - close, halt.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:47  [ТС]
Теперь, кстати, вообще ничего не происходит Ни окон диалоговых, ни соединения файла - вообще ничего

Добавлено через 1 минуту
А нет, происходит - вылазит системная ошибка, а мне хотелось бы, что бы моя вылазила
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:48
Выложи код - где-то опять ошибку сделал.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:49  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if fileexists ('pass.txt') then
  begin
  pass.loadfromfile('pass.txt');
  end
  else
  begin
  MessageDlg('Íå óäàëîñü íàéòè ôàéë pass.txt',mtError, [mbOK], 0);
  exit;
  end;
  if fileexists ('pass.txt') then
  begin
  uin.loadfromfile('UIN.txt');
  end
  else
  begin
  MessageDlg('Íå óäàëîñü íàéòè ôàéë UIN.txt',mtError, [mbOK], 0);
  exit;
  end;
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:52
Опять строка 10. Проверяешь один файл, читаешь другой.
1
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 22:17  [ТС]
А, точно! Спасибо!

Добавлено через 7 минут
Я только вот тут не много не понял, что тут вообще ?
Цитата Сообщение от Одиночка Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
p:=pass.Count;
 k:=uin.Count;
 i:=p; 
if p<k then i:=k;
 for i := 0 to i - 1 do
 begin 
application.ProcessMessages;
 if ((i<k) and (i<p)) then 
Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) 
else 
if i<k then 
Memo3.Lines.Add(pass.Strings[i]) 
else 
Memo3.Lines.Add(uin.Strings[i]); 
end;
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 22:19
Если файлы разной длины, то остаток большего файла переносится сам - без соединения со строками другого файла.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 22:28  [ТС]
Цитата Сообщение от Одиночка Посмотреть сообщение
Если файлы разной длины, то остаток большего файла переносится сам - без соединения со строками другого файла.
А можно как ни будь сделать так, что если файлы разной длины, то остаток большего файла соединялся с началом меньшего:
Code
1
2
3
4
5
6
7
8
asd;123
wrt;734
aht;401
oqp;514 //тут файл с буквами закончился
asd;968
wrt;028
aht;701
и т.д.
Думаю, смысл понятен
И вот ещё вопрос - видел программы, которые разбивают большой файл на два не больших. Собственно, можно эти строчки кода посмотреть?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 22:54

Не по теме:

В течение 30 минут.



Добавлено через 21 минуту
Тогда нужно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
p:=pass.Count;
k:=uin.Count;
i:=p;
if p<k then i:=k;
 
for i := 0 to i - 1 do
begin
  application.ProcessMessages;
  if ((i<k) and (i<p)) then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) else
  if i<k then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i-p]) else
  Memo3.Lines.Add(uin.Strings[i-k] + Edit3.Text + pass.Strings[i]);
end;
А насчёт второго вопроса с налёта не отвечу. Подумаю и пропишу завтра. Ты только напиши: разбивать нужно без учёта строк, или с учётом? Можно разбить просто посреди строки?
1
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
28.04.2012, 12:33  [ТС]
Цитата Сообщение от Одиночка Посмотреть сообщение

Не по теме:

В течение 30 минут.



Добавлено через 21 минуту
Тогда нужно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
p:=pass.Count;
k:=uin.Count;
i:=p;
if p<k then i:=k;
 
for i := 0 to i - 1 do
begin
  application.ProcessMessages;
  if ((i<k) and (i<p)) then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) else
  if i<k then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i-p]) else
  Memo3.Lines.Add(uin.Strings[i-k] + Edit3.Text + pass.Strings[i]);
end;
А насчёт второго вопроса с налёта не отвечу. Подумаю и пропишу завтра. Ты только напиши: разбивать нужно без учёта строк, или с учётом? Можно разбить просто посреди строки?
Не, мне пока что код целый не нужен, я хочу сам посидеть, по думать
Мне именно нужен код, который выполняет это действие, как sl.Duplicates:=dupignore, на пример
А разбивать, пока что, по размеру или на кол-во файлов. Допустим, есть файл в 10 мб, и его нужно разбить на 4 файла или на файлы, размер которых будет 1000кб (один из двух вариантов)

Добавлено через 13 часов 17 минут
Так что там?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.04.2012, 12:38
Насчёт разбивки файлов. Я понял, что тебе нужно, но с такими возможностями пока не сталкивался. Нужно искать. Сейчас закончу одну работу, - обещал, и покопаюсь. Тебе ведь это не срочно?
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
28.04.2012, 12:53  [ТС]
Ну, в принципе, не срочно, но хотелось бы по быстрее

Добавлено через 7 минут
А вот это не оно будет? Тут, вроде, файл про размеру(в 1024б) разбивается, не?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const maxsize = 1024;
var F,W: TextFile; b,n: longint; c: char;
begin
  AssignFile(paramstr(1))
  Reset(F);
  n:=1; //first part has id "1"
  repeat
    i:=1;
    AssignFile(W,'new'+inttostr(i)+'.rar'); //creating new part
    ReWrite(W);
    while (i<=maxsize) and not(eof(F)) do
      begin
        read(F,c);
        inc(i);
        write(W,c);
      end;
    CloseFile(W);
    inc(n);
  until eof(F);
  CloseFile(F);
end.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.04.2012, 14:32
Это разбивка файла по-живому на части по 1024 байта. Побайтный перенос - очень не рационально. И грубо. Поищу лучшие варианты.

Добавлено через 1 час 17 минут
Это тоже разбивка по-живому, но более эффективная.
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
var
  Form1: TForm1;
 
  O,N : File; //Нетипизированные файлы
 
Const
  //Имя исходного файла (можно ввести/задать)
  NameOldFile : String = 'Old.rar';
  //Имена новых файлов (можно ввести/задать)
  PrefixNewFile : String = 'New';
  //Расширение новых файлов (можно ввести/задать)
  ExtNewFile : String = 'rar';
  //Размер новых файлов (можно ввести/задать)
  maxsize = 1024; //Здесь не более 65536 байт
 
implementation
 
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  //Буфер для чтения
  Buff : Array[0..65535] of Byte;
  II,i : Integer;
  SizeNewFile : Longint;
Begin
  AssignFile(O,NameOldFile);
  Reset(O,1);
  i:=0; //Для нумерации выходных файлов
  Repeat
    SizeNewFile:=0; //Текущая длина файла-приёмника
    AssignFile(N,NameOldFile+inttostr(i)+'.'+ExtNewFile);
    ReWrite(N,1);
    While ((SizeNewFile<maxsize) And (Not (Eof(O)))) Do
    Begin
      II:=65536;
      If II>(maxsize-SizeNewFile) Then
      //Если остаток до нужной длины меньше длины буфера
      //будем читать сколько нужно
      II:=(maxsize-SizeNewFile);
      BlockRead(O,Buff,II,II);
      Inc(SizeNewFile,II);
      BlockWrite(N,Buff,II,II);
    End;
    CloseFile(N);
    Inc(i);
  Until Eof(O);
  CloseFile(O);
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2012, 14:32
Помогаю со студенческими работами здесь

Как открыть файл на чтение и запись, создав его, если его не существует, и перезаписать, если он существует?
Как открыть файл на чтение и запись, создав его, если его не существует, и перезаписать, если он существует?

Как загрузить текстовый файл с сервера в TStringList или Memo?
Привет друзья. :) Вопрос у меня такой, как осуществить загрузку текстового файла с сервера напрямую в Memo или TStringList, минуя...

Как проверить существует ли файл в директории
Как проверить существует ли файл в указанной директории. Если да: Выдать сообщение что существует. Если нет: выдать сообщение что файл...

Как на SSI проверить существует ли файл?
Проблема такая: надо на SSI проверить существует ли файл(если да то его надо включить), и если нет, то включить другую страничку. Текст...

Как проверить существует ли файл // папка
Как проверить существует ли файл // папка Раньше я использовал библиотеку Scripting и классы FileSystemObject (FSO) и Dictionary ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru