Как удалить файл в корзину c
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
DeleteFile(String)
Параметры
Путь к удаляемому файлу и его имя.
Исключения
Путь является недопустимым, так как он либо представляет собой строку нулевой длины (пустую строку), либо содержит только пробел, либо содержит недопустимые символы, либо оканчивается косой чертой там, где должен быть указан файл, либо представляет собой путь к устройству (начинается с символов \\.\).
Параметр file имеет значение Nothing или является пустой строкой.
Длина пути превышает максимальную длину, определенную в системе.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
Файл уже используется.
У пользователя отсутствуют необходимые разрешения на просмотр пути.
Файл не существует.
Пользователь не имеет разрешения на удаление файла, или файл доступен только для чтения.
Примеры
В этом примере удаляется файл Test.txt .
В этом примере файл Test.txt удаляется и пользователь может подтвердить удаление файла.
В этом примере файл Test.txt удаляется и отправляется в корзину.
Комментарии
Кому | См. |
---|---|
Удаление файла | Практическое руководство. Удаление файла в Visual Basic |
Применяется к
DeleteFile(String, UIOption, RecycleOption)
Параметры
Путь к удаляемому файлу и его имя.
Указывает, следует ли отображать ход выполнения операции. Значение по умолчанию — UIOption.OnlyErrorDialogs .
Следует ли отправлять удаленный файл в корзину. Значение по умолчанию — RecycleOption.DeletePermanently .
Исключения
Путь является недопустимым, так как он либо представляет собой строку нулевой длины (пустую строку), либо содержит только пробел, либо содержит недопустимые символы, либо оканчивается косой чертой там, где должен быть указан файл, либо представляет собой путь к устройству (начинается с символов \\.\).
Параметр file имеет значение Nothing или является пустой строкой.
Длина пути превышает максимальную длину, определенную в системе.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
Файл уже используется.
У пользователя отсутствуют необходимые разрешения на просмотр пути.
Файл не существует.
Пользователь не имеет разрешения на удаление файла, или файл доступен только для чтения.
Примеры
В этом примере удаляется файл Test.txt .
В этом примере файл Test.txt удаляется и пользователь может подтвердить удаление файла.
В этом примере файл Test.txt удаляется и отправляется в корзину.
Комментарии
Параметры showUI и recycle параметры не поддерживаются в приложениях, которые не являются интерактивными пользователями, такими как службы Windows.
Кому | См. |
---|---|
Удаление файла | Практическое руководство. Удаление файла в Visual Basic |
См. также раздел
Применяется к
DeleteFile(String, UIOption, RecycleOption, UICancelOption)
Параметры
Путь к удаляемому файлу и его имя.
Указывает, следует ли отображать ход выполнения операции. Значение по умолчанию — UIOption.OnlyErrorDialogs .
Следует ли отправлять удаленный файл в корзину. Значение по умолчанию — RecycleOption.DeletePermanently .
Указывает, выдается ли исключение, когда пользователь отменяет операцию. Значение по умолчанию — UICancelOption.ThrowException .
Исключения
Путь является недопустимым, так как он либо представляет собой строку нулевой длины (пустую строку), либо содержит только пробел, либо содержит недопустимые символы, либо оканчивается косой чертой там, где должен быть указан файл, либо представляет собой путь к устройству (начинается с символов \\.\).
Параметр file имеет значение Nothing или является пустой строкой.
Длина пути превышает максимальную длину, определенную в системе.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
Файл уже используется.
У пользователя отсутствуют необходимые разрешения на просмотр пути.
Файл не существует.
Пользователь не имеет разрешения на удаление файла, или файл доступен только для чтения.
Пользователь отменил операцию, и для параметра onUserCancel установлено значение ThrowException.
Примеры
В этом примере удаляется файл Test.txt .
В этом примере файл Test.txt удаляется и пользователь может подтвердить удаление файла.
В этом примере файл Test.txt удаляется и отправляется в корзину.
Комментарии
Параметры showUI и recycle``onUserCancel параметры не поддерживаются в приложениях, которые не являются интерактивными пользователями, например службами Windows.
Как правильно удалять папки и файлы?
Хочу чтобы мне дали пару примеров) как правильно реализовывать) а то голову ломаю! Вообщем начнем.
Мониторить папку и удалять маленькие файлы
имеется папка, в нее поступают файлы. необходимо постоянно мониторить папку на наличие новых.
Как удалять файлы с компьютера в программе?
К примеру есть такое приложение using System; using System.Collections.Generic; using.
Массаракш, непонятно зачем ты все эти ссылки дал. они все удаляют мимо корзины.
kolorotur, охренеть сколько кода. неужели нет более короткого способа?
Но мне подобные решения не нравятся.
Я бы предпочел более-менее "родной" метод (хоть и через PInvoke). Его можно затолкать в отдельную сборку и использовать в качестве утилиты. Удобно.
Виноват не вторая, а третья
там:
Ниже приведен пример использования Win32 API функции SHFileOperation для перемещения файла или директории в корзину Windows. В случае перемещения директории в корзину, выбранная директория может содержать файлы и папки.
Как в файловом менеджере в listview удалять, копировать и вставлять файлы
Как мне в файловом менеджере в listview удалять файлы, копировать и вставлять файлы? opendialog.
При нажатии на кнопку удалять папку (директорию) и все файлы в ней
Помогите пожалуйста, мне нужно нажатием на кнопку удалять элемент из листбокса, а так же папку.
Удалять каталоги в MS Visual Studio Ultimate 2012
Разработать программу, которая позволяет удалять каталоги, содержащие файлы. Имя каталога.
Какие каталоги можно удалять в свежеустановленной windows 8.1 ?
Недавно купил ноутбук hp с установленной windows 8.1. Всего 500Gb. Поделено на диски C и D. Диск.
Но как я могу использовать эту функцию для отправки файла в корзину вместо того, чтобы просто удалить его сразу?
ПРИМЕЧАНИЕ. Это также не работает с интерактивными приложениями без пользовательского интерфейса, такими как службы Windows.
Эта оболочка может предоставить вам необходимую функциональность:
Хотя это будет работать с интерактивными приложениями пользовательского интерфейса, это не будет работать с интерактивными приложениями без пользовательского интерфейса, такими как приложение службы Windows.
Добавьте ссылку на сборку Microsoft.VisualBasic. Нужный класс находится в этой библиотеке.
Добавьте этот оператор using в начало файла using Microsoft.VisualBasic.FileIO ;
Используйте FileSystem.DeleteFile для удаления файла, есть возможность указать корзину или нет.
Используйте FileSystem.DeleteDirectory для удаления каталога с возможностью указать, отправлять его в корзину или нет.
Следующее решение проще других:
Вы можете использовать другие функции корзины с помощью этой библиотеки.
Во-первых, не забудьте добавить библиотеку «Microsoft Shell Controls And Automation» (из меню COM), чтобы иметь возможность использовать пространство имен Shell32 . Он будет динамически связан с вашим проектом, а не компилироваться вместе с вашей программой.
К сожалению, вам нужно прибегнуть к Win32 API, чтобы удалить файл в корзину. Попробуйте следующий код на основе этот пост. Он использует общую функцию SHFileOperation для операций с файловой системой через оболочку Windows.
Определите следующее (в классе утилит, вероятно, лучше всего).
И чтобы использовать его для удаления файла, отправив его в корзину, вам нужно что-то вроде:
Вы можете DllImport SHFileOperation в сделай это.
Я использую этот метод расширения, тогда я могу просто использовать DirectoryInfo или FileInfo и удалить его.
Образец того, как это назвать, может быть таким:
Для этого есть встроенная библиотека .
Сначала добавьте ссылку Microsoft.VisualBasic Затем добавьте этот код:
У меня есть этот класс, который, похоже, неплохо работает на не 64-битных версиях.
Я знаю, что есть и другие решения, требующие ссылки на Microsoft.VisualBasic, но я бы предпочел использовать p / invoke.
В x64 SHFILEOPSTRUCT должен быть объявлен без параметра Pack = 1, иначе он завершится ошибкой. Это настоящая боль, если вы хотите, чтобы ваш код не зависел от платформы, поскольку вам нужно объявить две отдельные структуры, одну с Pack = 1, а другую без. Затем вам нужно объявить два разных вызова SHFileOperation, по одному для каждой из структур. Затем вам нужно решить, какой из них вызвать, в зависимости от того, используете ли вы 32 или 64 бит.
Как указано на сайте PInvoke: не объявляйте значение размера пакета. Если вы его опустите, при маршалинге будет использоваться правильное значение, и один SHFILEOPSTRUCT может использоваться как для 32-разрядной, так и для 64-разрядной операции.
2 ответа
Вы просматривали сайт PInvoke? Он имеет несколько иное определение типа FILEOPSTRUCT, с одной стороны, принудительное использование Unicode. Интересно, не путает ли charset = auto . как будто по умолчанию используется ANSI на 32-битной версии, но Unicode на 64-битной, и что-то идет не так где-то посередине.
РЕДАКТИРОВАТЬ; Кроме того, эталонный подход Visual Basic прост . Я знаю, что люди по какой-то причине испытывают отвращение к нему, но соответствующие библиотеки DLL по-прежнему являются частью базовой структуры, поэтому вы не будете добавлять никаких новых зависимостей.
Проблема заключается в [StructLayout (LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]. Для 64bit вам нужно удалить Pack = 1, и он работает . Поскольку вы указали мне на сайт PInvoke, он даже говорит об этом там (прямо в нижней части статьи говорится, что нужно удалить Pack = 1, когда это 64-битная ОС!
Ха-ха, я даже не стал прокручивать так далеко, я просто увидел различия в определении основной структуры. Тем не менее, это своего рода решение, хотя и немного неудобное.
Нельзя сказать, что это просто.
Это очень просто.
Надо переместить файл в карзину, как в обычную папку.
BOOL MoveFile(
LPCTSTR lpExistingFileName, // путь + имя перемещаемого файла
LPCTSTR lpNewFileName // путь + имя конечного файла (для тебя - путь в карзину)
);
if(!MoveFile("c:/myfile.txt","c:/Recycled/myfile.txt"))MessageBox(NULL,"Can't delete myfile.txt","My application",MB_OK);
Originally posted by lord Kelvin
Нельзя сказать, что это просто.
Это очень просто.
Надо переместить файл в карзину, как в обычную папку.
BOOL MoveFile(
LPCTSTR lpExistingFileName, // путь + имя перемещаемого файла
LPCTSTR lpNewFileName // путь + имя конечного файла (для тебя - путь в карзину)
);
if(!MoveFile("c:/myfile.txt","c:/Recycled/myfile.txt"))MessageBox(NULL,"Can't delete myfile.txt","My application",MB_OK);
Увы, это просто, если у тебя система Win98 и ты гарантированно работаешь на диске С:. Если у тебя XP с несколькими учетными записями и неизвестен рабочий диск, то все не так радужно :(
Originally posted by GDragon
Увы, это просто, если у тебя система Win98 и ты гарантированно работаешь на диске С:. Если у тебя XP с несколькими учетными записями и неизвестен рабочий диск, то все не так радужно :(
Диск C: есть всегда, это раз. Корзина находиться не в ../Dobuments and settings/. а прямо на диске, это два.
P.S. Папка Recycled есть на каждом диске.
Это сущее вранье! У меня установлена Windows XP, и там нет никаких дисков С:! Их вообще-то переименовать можно.
А вот узнать имя хотя бы системной папки, для этого есть API'шные команды, чё-то типа GetWindowsDirectory, а там выделить букву диска как нечего делать
Это сущее вранье! У меня установлена Windows XP, и там нет никаких дисков С:! Их вообще-то переименовать можно.
А вот узнать имя хотя бы системной папки, для этого есть API'шные команды, чё-то типа GetWindowsDirectory, а там выделить букву диска как нечего делать
Оффтоп:
Ну и как же ты убрал диск Це? Вытащил винт наверно.
Originally posted by lord Kelvin
Диск C: есть всегда, это раз. Корзина находиться не в ../Dobuments and settings/. а прямо на диске, это два.
P.S. Папка Recycled есть на каждом диске.
Ну, начнем с того, что С: есть не всегда, но даже если есть, а файл удаляется на диске D:, то не лучшая идея - грузить удаляемое файло на другой диск.
Папка называется не RECYCLED, а RECYCLER и содержит в себе еще несколько папок (по количеству учетных записей в системе) с именем типа GUID - по одному уникальному имени для каждой записи. К стати, файло в них хранится не под собственными именами, а под каким-то образом перекодированными. GUID, соответствующий текущему юзеру можно выцепить из HKCU\Software\Microsoft\Protected Storage System Provider.
Но что-то мне подсказывает, что удаление в корзину можно сделать гораздо легче.
Originally posted by GDragon
Всем привет.
Народ, подскажите, как из программы удалить файл в корзину?
Выяснил, что энто делается с помощью SHFileOperation(). Теперь другая проблема - файл не хочет удаляться. Удалился только с диска С:, из папки - ни в какую.
Originally posted by GDragon
Выяснил, что энто делается с помощью SHFileOperation(). Теперь другая проблема - файл не хочет удаляться. Удалился только с диска С:, из папки - ни в какую.
Бббылин! Строка с именем удаляемого файла, оказывается, должна завершаться не одним, а двумя нулями! Идиотизьм какой-то.
Кому тоже интересно, вот код рабочей функции:
BOOL SafeDeleteFile(LPCTSTR lpFileName)
TCHAR lpPath[MAX_PATH];
ZeroMemory(lpPath, sizeof(TCHAR) * MAX_PATH);
CopyMemory(lpPath, lpFileName, sizeof(TCHAR) * strlen(lpFileName));
SHFILEOPSTRUCT shfoStruct = ;
shfoStruct.wFunc = FO_DELETE;
shfoStruct.pFrom = lpPath;
shfoStruct.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT;
if(!SHFileOperation(&shfoStruct))
return TRUE;
return FALSE;
>
Originally posted by GDragon
Бббылин! Строка с именем удаляемого файла, оказывается, должна завершаться не одним, а двумя нулями! Идиотизьм какой-то.
Не думаю. Кажется, потому, что можно передать сразу несколько файлов функции. Надо внимательнее прочитать доку.
Читайте также: