C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Управление файлами  (Прочитано 26693 раз)
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« : 01 марта 2008, 23:40:04 »

Здраствуйте! Подскажите код проги для перемещении файлов с одной папки в другую. тоисть у меня есть файл например в папке С:\temp а надо переместить в папку С:\temp2. как это зделать с помощью програми.
Записан
khan
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 93


« Ответ #1 : 02 марта 2008, 19:40:42 »

Если ты используешь C++, я бы посоветовал использовать поток ifstream файл который есть и перенаправить все в ofstream файл который тебе надо получить.
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #2 : 02 марта 2008, 21:55:09 »

Если ты используешь C++, я бы посоветовал использовать поток ifstream файл который есть и перенаправить все в ofstream файл который тебе надо получить.

Да я использую  C++. ъ
А как указать куда направить поток ofstream, так как он стандартно все перенаправляет в ту же папку. Я пишу вот так:

ifstream build;
build.open("Build.exe");

ofstream build2;
build2.open("Build.exe");

и после этой операции файл перенаправляется в ту же папку где он и был. А как зделать что б он перенаправился в другую папку?
Записан
Marvin
Участник
**

Сказали спасибо: +1/-0
Offline Offline

Сообщений: 298


« Ответ #3 : 02 марта 2008, 22:11:55 »

CopyFile("имя_исходного_файла", "имя_нового_файла", <непомно какой параметр int. ставь 1>);
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #4 : 03 марта 2008, 12:53:23 »

CopyFile("имя_исходного_файла", "имя_нового_файла", <непомно какой параметр int. ставь 1>);

Как я не пробовал но эта команда копирует файл только в локальный диск, а как зделать что бы он копировал файл в папку например  C:\Documents and Settings?

Если я набираю так:

CopyFile("AdmDll.dll","C:\Documents and Settings\AdmDll.dll",1);

то файл копируется в лок.диск С с именем Documents and SettingsAdmDll.dll
Помогите разобратся плз.
Записан
anton_ms
Участник
**

Сказали спасибо: +2/-0
Offline Offline

Сообщений: 252


« Ответ #5 : 03 марта 2008, 13:02:41 »

Код:
int __fastcall TForm1::SH_CopyMove(AnsiString NameSource, AnsiString NameDest, bool cm)
{
String sSource, sDest;

sSource = NameSource;
sSource.SetLength(sSource.Length() + 1);
sSource[sSource.Length()] = '\0';
sSource.SetLength(sSource.Length() + 1);
sSource[sSource.Length()] = '\0';

sDest = NameDest;
sDest.SetLength(sDest.Length() + 1);
sDest[sDest.Length()] = '\0';
sDest.SetLength(sDest.Length() + 1);
sDest[sDest.Length()] = '\0';

short i, k;
int n = 0;
for(i = 1; i <= sSource.Length(); ++i) if(sSource[i] == ';') { sSource[i] = '\0'; ++n; }
for(k = 1; k <= sDest.Length(); ++k) if(sDest[k] == ';') { sDest[k] = '\0'; --n; }
if(n!=0) return (-1);

SHFILEOPSTRUCT sh;
ZeroMemory(&sh, sizeof(sh));
sh.hwnd =0;
sh.fFlags = FOF_MULTIDESTFILES;
sh.wFunc = cm?FO_MOVE:FO_COPY;
sh.pFrom = sSource.c_str();
sh.pTo = sDest.c_str();
sh.hNameMappings = NULL;
sh.lpszProgressTitle = NULL;
return(SHFileOperation ( &sh ));
}

пример вызова

Код:
SH_CopyMove("C:\\AdmDll.dll","C:\\Documents and Settings\\AdmDll.dll,FO_COPY);
Записан
Marvin
Участник
**

Сказали спасибо: +1/-0
Offline Offline

Сообщений: 298


« Ответ #6 : 03 марта 2008, 14:44:56 »

CopyFile("имя_исходного_файла", "имя_нового_файла", <непомно какой параметр int. ставь 1>);
CopyFile("AdmDll.dll","C:\Documents and Settings\AdmDll.dll",1);

CopyFile("AdmDll.dll","C:/Documents and Settings/AdmDll.dll",1);

(слеш в другую сторону)
Записан
Rius
Давний друг
**

Сказали спасибо: +116/-5
Offline Offline

Сообщений: 753


WWW
« Ответ #7 : 03 марта 2008, 15:08:13 »

Marvin, это же Windows
Код:
CopyFile("AdmDll.dll","C:\\Documents and Settings\\AdmDll.dll",1);
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #8 : 03 марта 2008, 15:32:43 »

CopyFile("AdmDll.dll","C:\\Documents and Settings\\AdmDll.dll",1);

CopyFile("AdmDll.dll","C:/Documents and Settings/AdmDll.dll",1);

Спасибо!  И первый и второй вариант работает.  Смеющийся

Но возникнул ёщё один вопрос:

Как с помощью C++ удалять файлы?  Тоисть также напишите пожалуйста команду.
Записан
anton_ms
Участник
**

Сказали спасибо: +2/-0
Offline Offline

Сообщений: 252


« Ответ #9 : 04 марта 2008, 05:23:13 »

http://cbuilder.ru/index.php?topic=1320.0
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #10 : 04 марта 2008, 13:00:27 »

И ещё один вопрос появился:

Как запускать файли(программы) через С++ ?
Записан
anton_ms
Участник
**

Сказали спасибо: +2/-0
Offline Offline

Сообщений: 252


« Ответ #11 : 04 марта 2008, 13:20:30 »

http://cbuilder.ru/index.php/topic,1381.0.html
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #12 : 04 марта 2008, 16:42:55 »


Что то я в той статье не нашел команды запуска файлов, напишите сами эту команду плз.....
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #13 : 04 марта 2008, 17:33:34 »

С запуском программ я разобрался наконецто  Смеющийся

Помогите ещё пожалуйста разобратся как удалять файли, папки с файлами....
Записан
oxotnik
Глобальный модератор
***

Сказали спасибо: +100/-15
Offline Offline

Сообщений: 2425


« Ответ #14 : 04 марта 2008, 17:49:56 »

Код
void DeleteFiles (AnsiString path)
{
 TSearchRec sr;
 if (FindFirst(path+"\\*.*", faAnyFile, sr) == 0)
 {
   do
     {
       if (sr.Attr & faDirectory)
          {
            if (sr.Name!=".")
            if (sr.Name!="..")
               {
                 DeleteFiles(path+sr.Name+"\\");
               }
          }
       else
          {
            DeleteFile (path+sr.Name);
          }
      } while (FindNext(sr) == 0);
   FindClose(sr);
 }
}
удаляет все файлы и папки в указанном path
Записан
WaRK
Участник
**

Сказали спасибо: +4/-1
Offline Offline

Сообщений: 207


WWW
« Ответ #15 : 04 марта 2008, 22:04:11 »

to oxotnik:

Наведи пожалуйста пример удаления папки  "C:\bcb" с вложенными файлами... а то я не могу разобратся. И ещё: как мне эту операцию вклинить в "Button1Click" ?
Записан
anton_ms
Участник
**

Сказали спасибо: +2/-0
Offline Offline

Сообщений: 252


« Ответ #16 : 05 марта 2008, 05:33:31 »

функция от oxotnik удаляет только файлы в указанной директории, если же надо удалить и папки то вот:
Код:
bool TForm1::DeleteDir(AnsiString DirName)
{
TSearchRec sr;
if (DirName.Length())
 {
 if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))
 do
  {
  if (!(sr.Name=="." || sr.Name==".."))
   if (((sr.Attr & faDirectory) == faDirectory ) ||
   (sr.Attr == faDirectory))
    {
    FileSetAttr(DirName+"\\"+sr.Name, faDirectory );
    DeleteDir(DirName+"\\"+sr.Name);
    RemoveDir(DirName + "\\"+sr.Name);
    }
    else
    {
    FileSetAttr(DirName+"\\"+sr.Name, 0);
    DeleteFile(DirName+"\\"+sr.Name);
    }
  }
 while (!FindNext(sr));
 FindClose(sr);
 }

вызов на Button1Click:
Код:
DeleteDir("C:\\bcb");
предварительно надо функцию DeleteDir объявить членом класса TForm1

Записан
oxotnik
Глобальный модератор
***

Сказали спасибо: +100/-15
Offline Offline

Сообщений: 2425


« Ответ #17 : 05 марта 2008, 08:57:24 »

Цитата: anton_ms
функция от oxotnik удаляет только файлы в указанной директории
странно... у меня она и и папки сносит
Записан
AVC
Администратор
***

Сказали спасибо: +28/-6
Offline Offline

Сообщений: 1189


« Ответ #18 : 05 марта 2008, 12:22:18 »

Цитировать
пример удаления папки  с вложенными файлами...
А еще можно нагрузить систему, например так
Код:
AnsiString ddir   = "F:\\aaa 1"; // Удаляемая папка со всем содержимым

AnsiString cmdline = "/C \"rmdir /S /Q \"" + ddir + "\"\"";
//ShellExecute(Handle, "open", "cmd.exe", cmdline.c_str(), NULL, SW_HIDE);
ShellExecute(Handle, "open", getenv("ComSpec"), cmdline.c_str(), NULL, SW_HIDE);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: