Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 16

System.IO.File.Copy Два файла с одинаковыми именами не перезаписывались

07.12.2017, 18:54. Показов 6233. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие обитатели форума. Мне нужна ваша помощь. Пожалуйста помогите решить проблему.У меня есть проект. Вот отрывок кода из него. Но главное внимание на последнюю строку
C#
1
2
3
4
5
6
7
8
9
10
 string dir = Environment.CurrentDirectory + "/папка/"; //Директория куда скидываем файлы
                                                                           
string[] filenames = openFileDialog1.FileNames;//массив
 string filename = openFileDialog1.FileName;
//Получаем путь к выделенным файлам
FileInfo fi = new FileInfo(openFileDialog1.FileName);
string dirSource = fi.DirectoryName;
//Сохранение файла в указанную директорию
string fname = filename.Substring(dirSource.Length + 1);
System.IO.File.Copy(Path.Combine(dirSource, fname), Path.Combine(dir, fname), true);
С помощью последней строки.
я копирую файл из одного места в другое. Но есть одна проблема в том что при копировании файла с одинаковым именем он перезаписывается( Если поставить false проект вылетает). Как мне сделать чтобы при копировании файлов с одинаковыми именами ко 2 файлу просто дописывалась цифра и он сохранялся ,вообщем как то сохранить главное чтобы не перезаписывался.
Либо просто поставить вместо True ,False и чтобы при копировании файлов с одинаковыми именами проект не вылетал,а выводилось сообщение что копирование файла невозможно так как такой файл уже существует.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2017, 18:54
Ответы с готовыми решениями:

Даны два текстовых файла с именами Name1 и Name2. Добавить в конец файла Name1 содержимое файла Name2
Даны два текстовых файла с именами Name1 и Name2. Добавить в конец файла Name1 содержимое файла Name2. Добавлено через 20 минут ...

Странное исключение File.Copy
Здравствуйте, У меня тут возникла странная проблема на ровном месте, как говорится. Есть проект, который выполняет определенные...

Два класса с одинаковыми именами
В глобальной области видимости есть функция Polygon. Можно ли в своем пространстве имен создать класс с именем Polygon? Будут они мешать...

13
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
08.12.2017, 08:55
Как вариант - использовать обработку исключений, в обработчике исключения менять имя файла (добавлять цифру) и заново пробовать копировать.
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
08.12.2017, 13:11
А лучше перед копированием проверять существует ли такой файл и если существует, то проверять существует ли файл в который вы хотите переименовать и когда функция скажет, что файла не существует - переименовывайте и делайте копирование.
1
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
08.12.2017, 13:16
C#
1
if(File.Exists(path)) path = ...
1
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 16
08.12.2017, 13:41  [ТС]
Cпасибо за ответы. Логика мне понятна что нужно сделать. Проблема в том что я не понимаю как описать это все. Как условие на проверку поставить имеется ли тот файл который я выбираю в директории в которую я копирую файл. и как мне имя потом ему менять. Через if(File.Exists(path)) path я пытаюсь что-то сделать но что то ничего не выходит(
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
08.12.2017, 13:50
Показывайте, как пытаетесь
0
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 16
08.12.2017, 13:56  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
 string dir = Environment.CurrentDirectory + "/portfolio/"; //Директория куда скидываем файлы
                                                                           
                string[] filenames = openFileDialog1.FileNames; // массив
                string filename = openFileDialog1.FileName;
                //Получаем путь к выделенным файлам
                FileInfo fi = new FileInfo(openFileDialog1.FileName);
                string dirSource = fi.DirectoryName;
                //Сохранение файла в указанную директорию
                string fname = filename.Substring(dirSource.Length + 1);
              string message = (File.Exists(dirSourse)) ? "Файл существует" : "Файл не существует";
                MessageBox.Show("" + message);
                System.IO.File.Copy(Path.Combine(dirSource, fname), Path.Combine(dir, fname), true);
string message = (File.Exists(dirSourse)) Вот тут где dirSourse написано мне там нужно путь указать ? Путь в директорию куда файл копируется я не пойму просто или что там указать надо.
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
08.12.2017, 14:42
Написал вам проверку на существование файла, если файл существует то он будет скопирован с новым именем которого нет в конечном каталоге (будет пробовать добавлять цифры 0-1-2-3 и т.д.), разбирайтесь
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string dirSourse = "D:\\image.png"; //Файл который хотите копировать
            string dirnewSourse = "D:\\Download\\image.png"; //Файл с новым каталогом в который копируем
            if (File.Exists(dirnewSourse))
            {
                //Такой файл уже существует в конечной папке
                String[] dirsfile = Directory.GetFiles(Path.GetDirectoryName(dirnewSourse), "*"+Path.GetExtension(dirnewSourse).Remove(0,1)); //Поиск всех файлов в папке с расширением
                for (int i = 0; i< dirsfile.Length; i++) 
                {
                    string newname = Path.GetDirectoryName(dirnewSourse) + "\\" + Path.GetFileNameWithoutExtension(dirnewSourse) + i + Path.GetExtension(dirnewSourse); //Новое имя файла
                    if (!File.Exists(newname)) { 
                        File.Copy(dirSourse, newname); //Переместить файл с новым именем
                        break;
                    }
                }
            }
            else
            {
                //Такого файла не существует в конечной папке, можно копировать
                File.Copy(dirSourse, dirnewSourse); //Переместить файл
            }
1
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
08.12.2017, 14:51
Демонстрация
Миниатюры
System.IO.File.Copy Два файла с одинаковыми именами не перезаписывались  
1
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 16
08.12.2017, 15:05  [ТС]
Nalik, Спасибо большое за пример! Я сейчас попробую что-нибудь сделать. Можно будет вам в Личные сообщение если что-то не получится написать и задать вопросы? пожалуйста
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
08.12.2017, 17:35
Vitas2152, только если они не сложные, а то я очень ленивый) а вообще лучше задавайте вопросы в данной теме если проблема не решена или создавайте новую)
0
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 16
08.12.2017, 20:21  [ТС]
Nalik, Не подскажите? вот вы написали мне код все получается,но я еще узнать хотел как мне сделать чтобы если файл с таким же именем имеется ,сделать заглушку. типо чтобы вывелось сообщение что такой файл уже существует и отменить действие( чтобы просто обратно выкинуло на форму)?
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
08.12.2017, 20:47
Лучший ответ Сообщение было отмечено Vitas2152 как решение

Решение

C#
1
2
3
4
5
if (File.Exists(dirnewSourse))
{
   MessageBox.Show("Такой файл уже существует", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
   return; 
}
1
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 16
08.12.2017, 21:06  [ТС]
Nalik, Благодарю вас! С вашими примерами во всем разобрался и сделал теперь то что нужно! Спасибо огромное! и всем остальным тоже спасибо что откликнулись!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2017, 21:06
Помогаю со студенческими работами здесь

Checking file system on C: the type of file system is NTFS one of your disk needs to be checked for consistency
При включении компьютера при загрузке всегда показывается надпись: Checking file system on C: the type of file system is NTFS one of your...

Fail to copy file to HDD.File:E\images\WOP000280OXXTC0111.SWM
Добрый день,новичек просит помощи в решении ошибки(тема),возникающей при установке W7 домашняя расширенная (лицензионная,пред установлен...

Даны два файла вещественных чисел с именами S1 и S2
Нужна помощь, люди добрые, на С++. Времени разбираться, как сделать, совсем уже нету( Даны два файла вещественных чисел с именами S1 и...

Solution'ы с одинаковыми именами
Всем привет! Эта студия (.NET 2003) уже достала ... почему, когда открываю решение, она компилит файлы из другой папки, которая содержит...

Копирование аттачментв с одинаковыми именами!
Добрового времени суток всем! Ай нид хелп: Копирую в документ два разных файла (но с одинаковыми именами) из двух разных документов,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru