Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577

Если файл существует, то переименовать его

28.01.2015, 12:37. Показов 2484. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые программисты)))

Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  if (OpenDialog1->Execute())
   {
     AnsiString h, j;
     h=ExtractFilePath(OpenDialog1->FileName)+ExtractFileName(OpenDialog1->FileName); //источник
     j=ExtractFilePath(Application->ExeName)+"Resume\\";  //приемник
     //проверка на совпадение файла
     if(FileExists(j.c_str()+ExtractFileName(OpenDialog1->FileName)))
        {
          ShowMessage("файл уже существует");
          //НЕ ЗНАЮ КАК ТУТ НАПИСАТЬ
        }
     else
        {
          ShowMessage("можно копировать");
          if(!MoveFiles(h.c_str(), j.c_str()))
              ShowMessage("Скопировано");
          else
              ShowMessage("Ошибка");
        }
   }
}
Копирование файла в указанный каталог работает правильно.
Нужно чтобы программа переименовывала файл (если он найден). К примеру был файл "test.txt" в "test1.txt" и т.д.
Помогите)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2015, 12:37
Ответы с готовыми решениями:

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

Ввести с клавиатуры имя файла; если он существует, переименовать его
Ребят очень нужна ваша помощь, в понедельник сдача практики осталась последняя прога.. никак не пойму как ее можно сделать... ввести с...

Ввести с клавиатуры имя файла; если он существует, переименовать его
Ввести с клавиатуры имя файла; если он существует, переименовать его (новое имя тоже вводится с клавиатуры)

12
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.01.2015, 13:16
Лучший ответ Сообщение было отмечено Within_t как решение

Решение

Есть функция Rename()

Добавлено через 4 минуты
И RenameFile()
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
28.01.2015, 14:01  [ТС]
Нашел тему:
действия над файлами
Где более подробно расписано...
C++
1
2
3
RenameFile(OldName,NewName);
OldName - это старое имя файла.
NewName - это новое имя файла.
Предположим в папке есть файл 1.txt. Программно я копирую в нее еще один файл с таким же именем. А если и в третий, четвертый и т.д. раз я буду копировать он по сути будет заменять эти файлы))) Как сделать чтобы NewName изменялось автоматически?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
28.01.2015, 14:09
Within_t, копируй через SHFileOperation с флагом FOF_RENAMEONCOLLISION, тогда если файл File.txt уже есть в папке, то новый файл с тем же именем будет скопирован как File - Copy.txt, следующий - как File - Copy (2).txt
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
28.01.2015, 14:18  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
SHFileOperation с флагом FOF_RENAMEONCOLLISION,
Вы можете написать как это выглядит, пожалуйста.)))
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
28.01.2015, 14:52
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Вот так, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    SHFILEOPSTRUCT sh = {0};
    wchar_t From[64] = L"D:\\test\\input.txt\0\0";
    wchar_t To[64] = L"D:\\pics\0\0";
 
    sh.hwnd = Handle;
    sh.wFunc =  FO_COPY; // Ну, или FO_MOVE, я не знаю, что там тебе нужно
    sh.pFrom = From;
    sh.pTo = To;
    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_RENAMEONCOLLISION;
    sh.hNameMappings = 0;
    sh.lpszProgressTitle = NULL;
 
    SHFileOperation(&sh);
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
28.01.2015, 15:48  [ТС]
Не получилось.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.01.2015, 16:00
Within_t, ну, и чего? Поздравить, посочувствовать? Или удалить пост, как не несущий никакой смысловой нагрузки? Весь теряюсь в догадках...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
28.01.2015, 16:04
Цитата Сообщение от Within_t Посмотреть сообщение
Не получилось.
А у меня - получилось. А себе я верю больше...
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.01.2015, 16:40
Within_t, чисто ради хохмы: Автоматическое изменение имени файла при записи лога. (Инкремент имени)
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
28.01.2015, 16:55  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
А у меня - получилось. А себе я верю больше...
Я сделал необходимый фрагмент кода более проще)
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,385
Записей в блоге: 3
28.01.2015, 18:20
Цитата Сообщение от Within_t Посмотреть сообщение
Я сделал необходимый фрагмент кода более проще)
Очень интересно увидеть.
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
29.01.2015, 17:32  [ТС]
Столкнулся с проблемой копирования(((

Данный код, работает когда ему хочется (как искусственный интеллект), для не которых названий файлов срабатывает для некоторых нет.

Может кто помочь разобраться???

Заранее благодарен.


C++
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
Unit1.cpp
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  if (OpenDialog1->Execute())
   {
     AnsiString h, j, l;
     h=ExtractFilePath(OpenDialog1->FileName)+ExtractFileName(OpenDialog1->FileName); //источник
     j=ExtractFilePath(Application->ExeName)+"Resume\\";  //приемник
     l=ExtractFileExt(OpenDialog1->FileName); //расширение
     Edit1->Text=h;
     Edit2->Text=j;
     Edit3->Text=l;
 
     //проверка на совпадение файла
     if(FileExists(j.c_str()+ExtractFileName(OpenDialog1->FileName)))
        {
          ShowMessage("файл уже существует");
 
          //Поиск имени файла без расширения
          AnsiString a = ExtractFileName(OpenDialog1->FileName), v;
          int len;
          len = a.Pos(".");
          v = a.SubString(1,len-1);
          ShowMessage("Имя файла: "+v);
 
          //присвоение нового имени
          AnsiString b = v+String(rand()%150)+l;
          ShowMessage("Новое имя: "+b);
 
          //изменение имени файла
          RenameFile(h.c_str(),b.c_str());
 
          //копирование файла
          AnsiString n = ExtractFileDir(OpenDialog1->FileName)+b;
          ShowMessage("Исходное местоположение файла: "+n);
 
          if(!MoveFiles(n.c_str(), j.c_str()))
             {
               ShowMessage("Скопировано");
                                  //имя.расширение
               LabeledEdit2->Text=j+ExtractFileName(n);
             }
          else
             {
               ShowMessage("Ошибка");
             }
          return;
        }
     //----------------------------------------------------------------------
     else
        {
          ShowMessage("можно копировать");
          if(!MoveFiles(h.c_str(), j.c_str()))
             {
               ShowMessage("Скопировано");
               LabeledEdit2->Text=j+ExtractFileName(OpenDialog1->FileName);
             }
          else
             {
               ShowMessage("Ошибка");
             }
          return;
        }
   }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Unit1.h
 
.............
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
int MoveFiles( AnsiString slSourceDir, AnsiString slTargetDir, bool toCopy = true )
{
SHFILEOPSTRUCT sh;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_FILESONLY;
sh.wFunc = toCopy ? FO_COPY : FO_MOVE;
sh.pFrom = slSourceDir.c_str();
sh.pTo = slTargetDir.c_str();
sh.hNameMappings = NULL;
sh.lpszProgressTitle = NULL;
return SHFileOperation ( &sh );
}
#endif
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2015, 17:32
Помогаю со студенческими работами здесь

Если h-файл существует, подключить его, если не существует, проигнорировать
Как это сделать?

Если файл не существует - создать его
Так как в Pascal abc нету функции IOResult, решил заменить на FileExists, но не получается Вот начальный код Program lab1; uses crt;...

Если файл существует, то распечатать построчно его содержимое
Если файл tabljumn.txt существует,то распечатать построчно его содержимое,иначе записать файл с таким именем таблицу умножения от 2 до 9. ...

Если файл не существует, показать OpenFileDialog для его самостоятельного выбора
Здравствуйте. Нужно чтобы при загрузке программы проверялся путь к БД, если такого нет то открыть OpenFileDialog(чтобы пользователь...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru