Копирование файлов из одной папки в другую
Нужно скопировать все файлы из папки С:/zello в папку С:/zello2
Программу с самого начала до конца
Заранее спасибо!
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Копирование файлов из одной папки в другую
Добрый день! Нашел на форуме хорошую функцию копирования файлов из одной папки в другую. Но там.
Копирование файлов из одной папки в другую
Привет форумчане нужна помощь. Нужен скрипт который будет копировать с одной папки в другую При.
Копирование файлов из одной папки в другую, но с пропуском одинаковых файлов в этих папках
Доброго времени суток. Прошу помощи в написании батника. Задача: Есть папка А с файлами 1,2,3 и.
Копирование из одной папки в другую случайных неповторяющихся файлов
дорогие форумчане, необходимо создать батник, который копирует из папки с файлами (более 1000 штук).
Статья Как скопировать файл с помощью языка C#?
Из этой статьи Вы узнаете, как скопировать файл, используя язык c#. Но, для начала хотелось бы сказать, что, не смотря на то, что данная операция на самом деле состоит из нескольких этапов, например, таких как создание нового файла, по байтовое копирование информации, удаление старого файла. В языке csharp нас избавили от всех этих «мелких нюансов», поэтому для того, чтобы скопировать файл 1.txt из папки c:\dir1 в папку с:\dir2, вам всего лишь нужно в своей программе написать буквально одну строчку кода.
using System.IO; //добавить! File.Copy(@"C:\dir1\1.txt", @"C:\dir2\2.txt", true);
Для работы мы используем класс File и метод Copy, в который в качестве первого параметра, передаём полный путь к файлу, который необходимо скопировать. Вторым параметров указываем, куда мы копируем файл. Третий, необязательный параметр, который имеет тип bool, позволяет определить действие, которое нужно выполнить, если в папке dir2 уже содержится файл (2.txt). Например, если установить значение true, то тогда при копировании файла (1.txt), файл (2.txt) будет перезаписан, если же мы установим значение false, то в таком случае получим выброс исключения, так как файл уже существует, а его изменение (перезапись) мы запретили.
Так же не забывайте при работе с пространством имён System.IO использовать блоки try catch.
try < File.Copy(); >catch (Exception ex)
Как скопировать все файлы?
И ещё один пример, в котором рассмотрим простую задачу, в которой нужно скопировать все файлы из папки Dir1 в папку Dir2.
//откуда копируем string Dir1 = @"C:\Dirs\Dir1"; //куда копируем string Dir2 = @"C:\Dirs\Dir2"; try < DirectoryInfo dirInfo = new DirectoryInfo(Dir1); foreach (FileInfo file in dirInfo.GetFiles("*.*")) < File.Copy(file.FullName, Dir2 + "\\" + file.Name, true); >> catch (Exception ex)
Сначала с помощью метода GetFiles, используя маску (*.*), получаем все файлы в папке Dir1, а затем по очереди копируем их. Если Вам необходимо скопировать все файлы только какого-то определенного типа, например все текстовые файлы (.txt), то тогда указываем маску (*.txt), для mp3 файлов (*.mp3) и так далее. Значение true указываем в том случаи, если требуется перезаписать старые файлы в папке Dir2.
- Передача данных между формами в языке c#
- Свойство ColumnCount элемента управления DataGridView
- Определение дня недели по дате
Комментарии, перенесенные из блога
САНЯ
24.08.2016 в 09:37
хм, к примеру я получил список файлов в папке и подпапках с датой изменения
string[] files = Directory.GetFiles(@"C:2", "*", SearchOption.AllDirectories); for (int i = 0; i
а как теперь скопировать все файлы к примеру в c:1 и потом через некоторе время скопировать файлы которые изменились?
ADMIN
25.08.2016 в 06:15
«а как теперь скопировать все файлы к примеру в c:1»
string[] files = Directory.GetFiles(@"C:2"); FileInfo fi; foreach (string file in files) < fi = new FileInfo(file); File.Copy(file, "C:1" + fi.Name); //или //File.Copy(file, "C:1" + Path.GetFileName(file)); >//или DirectoryInfo dirInfo = new DirectoryInfo(@"C:2"); foreach (FileInfo file in dirInfo.GetFiles())
и потом через некоторе время скопировать файлы которые изменились?
Например, можно добавить таймер и запускать его сразу после первого копирования.
timer1.Enabled = true; timer1.Interval = //уст. какой-то интервал времени; timer1.Tick += new EventHandler(timer1_Tick); void timer1_Tick(object sender, EventArgs e) < //1. Проверяем есть ли изменения //2. Копируем файлы, которые изменились >
САНЯ
25.08.2016 в 20:24
string[] files = Directory.GetFiles(@"C:2"); FileInfo fi; foreach (string file in files)
пару вопросов, что не задал сразу, сорри!
этим кодом я копирую файлы в папке 2, но в ней есть подпапки, а как скопировать все папки со всеми файлами? список папок и файлов я получаю в приведенным мной кодом выше, так же я получаю дату изменения, к примеру я первый раз сразу копирую все папки и файлы из 2, а потом будет работать таймер по которому будет копирование измененых файлов. Точнее я же получаю список файлов и папок в листбокс1, это к примеру, при запуске программы и сразу их копирую, а потом работает таймер, где я уже вывожу список папок и файлов листбокс2, и потом ведь я могу их сравнить и удалить совпадения по дате изменения, и остануться те которые нужно будет скопировать… как указать копирование файлов и папок из листбокса1, при запуске и листбокс2 по таймеру?))))
ADMIN
27.08.2016 в 14:49
как скопировать все папки со всеми файлами
можно использовать рекурсию, например:
//рекурсия private void CopyDirsAndFiles(string FromDir, string ToDir) < Directory.CreateDirectory(ToDir); foreach (string file in Directory.GetFiles(FromDir)) < File.Copy(file, ToDir + "" + Path.GetFileName(file)); >foreach (string dir in Directory.GetDirectories(FromDir)) < CopyDirsAndFiles(dir, ToDir + "" + Path.GetFileName(dir)); >> //откуда - куда CopyDirsAndFiles("C:2", "C:1");
как указать копирование файлов и папок из листбокса1, при запуске и листбокс2 по таймеру?))))
private void Form1_Load(object sender, EventArgs e) < timer1.Enabled = false; CopyDirsAndFiles(); //копирует 1 раз timer1.Enabled = true; timer1.Tick += new EventHandler(timer1_Tick); >void timer1_Tick(object sender, EventArgs e) < //1. Проверяем есть ли изменения //2. Копируем файлы, которые изменились >
САНЯ
27.08.2016 в 23:58
если честно, то у меня ничего не выходит, что то я совсем запутался вот полный листинг кода, задача получить все файлы и папки с подпапками в с:2 вывести листбокс1, потом скопировать в c:1, а там уже сам))
[cut]
void CopyAllDirsAndFiles(string FromDir, string ToDir) < Directory.CreateDirectory(ToDir); listBox1.Items.Add(ToDir); foreach (string file in Directory.GetFiles(FromDir)) < File.Copy(file, ToDir + "" + Path.GetFileName(file)); listBox1.Items.Add(file); >foreach (string dir in Directory.GetDirectories(FromDir)) < CopyAllDirsAndFiles(dir, ToDir + "" + Path.GetFileName(dir)); >>
САНЯ
29.08.2016 в 17:48
File.Copy(file, ToDir + «» + Path.GetFileName(file));
подскажи, а как сделать перезапись файл — этот метод запрещает это сделать? и такой если файл будет открыт, он скопируеться?
ADMIN
31.08.2016 в 16:29
подскажи, а как сделать перезапись файл — этот метод запрещает это сделать?»
Ответ на этот вопрос есть в статье.
если файл будет открыт, он скопируеться?
Да, но лучше всё равно обработать возможность возникновения System.IO.IOException
САНЯ
31.08.2016 в 19:51
админ, я использую CopyDir(@»C:2″, @»C:1″ а как указать вместо c:2 список папок в листбокс? пробывал пару вариантов, но видать не правильно
listBox1.Items.Add("c:2"); listBox1.Items.Add("c:3"); listBox1.Items.Add("c:4"); foreach (string dir in listBox1.Items)
САНЯ
02.09.2016 в 19:39
админ, новерно крайний вопрос)) в листбокс файл + дата изменения, скопировать как не получаеться и оно понятно, а как отделить при копировании дату изменения до пробела
foreach (string f in Directory.GetFiles(FromDir)) < listBox2.Items.Add(f + " " + Directory.GetLastWriteTime(FromDir)); try < File.Copy(f, ToDir + "" + Path.GetFileName(f), true); >catch (Exception ex) < MessageBox.Show(ex.Message); >>
ADMIN
04.09.2016 в 04:44
Получить только путь из строки?
string str = listBox1.Items[0].ToString(); string path = str.Substring(0, str.IndexOf(' '));
САНЯ
05.09.2016 в 05:30
Админ а что не правильно, пытаюсь удалить совпадение строк? удаляет только первую
for ( int i = 0; i < listBox1.Items.Count; i++) < if (listBox1.Items[i].ToString() == listBox2.Items[i].ToString()) < listBox1.Items.RemoveAt(i); >>
ADMIN
06.09.2016 в 03:32
Поставь точку остановы и посмотри, что происходит со списком listbox1 до удаления элемента и после.
САНЯ
07.09.2016 в 01:14
по идее должны быть так? переменные обьявлены в классе, я понимаю что это должно быть просто, но что то совсем не могу вникнуть…. очень хочу научится , но самоучкой трудно((
if (listBox1.Items[w].ToString() == listBox2.Items[q].ToString()) < for ( int w = 0; w < listBox1.Items.Count; w++) < listBox1.Items.RemoveAt(w); >>
ADMIN
07.09.2016 в 17:51
for (int i=0; i < listBox1.Items.Count; i++) < for (int k = 0; k < listBox2.Items.Count; k++) < if (listBox1.Items[i].Equals(listBox2.Items[k])) < listBox2.Items.Remove(listBox2.Items[k]); --k; >> >
САНЯ
09.09.2016 в 01:31
админ привет, подскажи что не так? после удаления сравнений, в листбоксе2 остаеться к примеру путь с:22.txt 11.11.11 11:11 но при использовании ниже приведенного кода, выдаёт ошибку!
foreach (string fi in listBox2.Items)
ADMIN
10.09.2016 в 07:27
выдаёт ошибку
САНЯ
11.09.2016 в 09:21
решил попробывать вставить рекурсию по нажатию кнопки
private void button2_Click(object sender, EventArgs e) < string ToDir = @"C:1"; string FromDir = listBox2.Items.ToString(); Directory.CreateDirectory(ToDir); foreach (string fi in listBox2.Items) - все нормально но потом когда возвращаеться сюда ошибка < string str = listBox2.Items[0].ToString(); string path = str.Substring(0, str.IndexOf(' ')); try < File.Copy(path, ToDir + "" + Path.GetFileName(fi), true); >catch (Exception ex) < MessageBox.Show(ex.Message); >foreach (string dir in Directory.GetDirectories(@"C:2")) < CopyDir(dir, ToDir + "" + Path.GetFileName(dir)); >> >
Необработанное исключение типа «System.InvalidOperationException» в System.Windows.Forms.dll
Дополнительные сведения: Список, к которому привязан данный перечислитель, был изменен. Перечислитель может использоваться, только если список не изменяется.
ADMIN
12.09.2016 в 04:21
По нажатию кнопки должно быть так:
private void button2_Click(object sender, EventArgs e)
Полный код метода CopyAllDirsAndFiles добавлял выше в комментариях.
Эта строка не содержит путь, хотя и не используется:
string FromDir = listBox2.Items.ToString();
Как в С скопировать папку со всеми файлами и перенести по указанному path
Мне необходимо скопировать папку со всеми файлами и перенести по указанному мною path, как это сделать? Различные MoveFile, CopyFile не подходят, так как они копируют только один файл, а мне нужно скопировать целиком папку со всем содержимым.
Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 20 окт 2020 в 5:45
S1NGer -iwni- S1NGer -iwni-
55 7 7 бронзовых знаков
C как скопировать файл в другую папку
Ответ: Вы можете легко копировать, удалять, перемещать файлы, используя API-функции CopyFile, DeleteFile, и MoveFile. Эти функции легко использовать, но они не выводят на дисплей ход выполнения операциии. Вот примеры их работы.
// копирует SOURCE.TXT в DEST.TXT, аргумент FALSE сообщает отмену // операции если DEST.TXT уже существует. CopyFile возвращает значение BOOL if( CopyFile("C:\\SOURCE.TXT","C:\\DEST.TXT", FALSE) == FALSE) Application->MessageBox("CopyFile failed", "Error", MB_OK); // MoveFile и DeleteFile также возвратят FALSE если операция не выполнилась. MoveFile("C:\\SOURCE.TXT","C:\\WINDOWS\\TEMP\\DEST.TXT"); DeleteFile("C:\\SOURCE.TXT");
Эти функции удобны, но к сожалению они не отображают «летящие папки» (ход выполнения). Чтобы получить «летящие папки», Вы должны использовать API-функцию SHFileOperation. Вышеупомянутые примеры приведены ниже, и показавают использование SHFileOperation. Обратите внимание, что в командах копирования и перемещения , можно задать необходимые каталоги.
// make sure to include the file SHELLAPI.H. Its located in the // INCLUDE\WIN32 file if you're curious. #include // скопировать SOURCE.TXT в DEST.TXT; char *From = "C:\\SOURCE.TXT\0"; char *To = "C:\\DEST.TXT\0"; SHFILEOPSTRUCT op; ZeroMemory(&op, sizeof(op)); op.hwnd = Handle; // Handle of main form or the application op.wFunc = FO_COPY; op.pFrom = From; op.pTo = To; op.fFlags= 0; SHFileOperation( &op); // переместить SOURCE.TXT в папку WINDOWS\TEMP char *From = "C:\\SOURCE.TXT\0"; char *To = "C:\\WINDOWS\\TEMP\0"; SHFILEOPSTRUCT op; ZeroMemory(&op, sizeof(op)); op.hwnd = Handle; op.wFunc = FO_MOVE; op.pFrom = From; op.pTo = To; op.fFlags= 0; SHFileOperation( &op); // послать все .tmp файлы в корзину char *File = "C:\\windows\\temp\\*.TMP\0"; SHFILEOPSTRUCT op; ZeroMemory(&op, sizeof(op)); op.hwnd = Handle; op.wFunc = FO_DELETE; op.pFrom = File; op.fFlags= FOF_ALLOWUNDO; SHFileOperation( &op); // скопировать все текстовые файлы из корненвого каталога // диска в папку temp. char *From = "C:\\*.TXT\0"; char *To = "C:\\WINDOWS\\TEMP\0"; SHFILEOPSTRUCT op; ZeroMemory(&op, sizeof(op)); op.hwnd = Handle; op.wFunc = FO_COPY; op.pFrom = From; op.pTo = To; op.fFlags= 0; SHFileOperation( &op);
1: Когда вы выбиратете FO_DELETE (удаление), файлы будут перемещены в корзину, если флаг fFlags содержит значение FOF_ALLOWUNDO. В противном случае они будут удалены.
2: Строки структуры pFrom и pTo являются указателями на строку символов. Это не массивы. Они должны содержать указатель на строку, но структура не выделяет памяти для помещения в нее строк.
Не делайте так :
op.pFrom = "C:\\*.TXT"; op.pTo = "C:\\TEMP";
3: Обратите внимание на дополнительный нулевой признак конца (добавленный с помощью ‘\0’) в строках имени файла. Документация MSDN заявляет, что pTo и pFrom должны быть законченны c двойным null указателем.
4: Строки, на которые указывают pFrom и pTo могут содержать больше чем одну строку. Каждая строка должна быть отделена нулевым символом. Двойной нулевой символ, упомянутый выше, используется, чтобы закончить полный список. Вот — пример:
char *From = "C:\\*.txt\0C:\\*.log\0C:\\*.tmp\0"; op.pFrom = From; // объявление From может быть немного проще, если использовать пробелы char *From = "C:\\*.txt\0" "C:\\*.log\0" "C:\\*.tmp\0";
5: При копировании или перемещении файлов, стиль FOF_RENAMEONCOLLISION в параметре fFlags будет препятствовать функции перезаписывать существующие с таким именем файлы. Оболочка создаст копии, типа «Копия readme.txt» (это так делает explorer ).
6: Вы можете также использовать FO_RENAME как wFunc параметр. fFlags параметр может содержать много других расширенных стилей. Для получения дополнительной информации прочитайте WIN32.HLP