我希望从网络PC中删除文件。用户可以完全控制PC上用于删除文件的共享文件夹。 我有这段代码:
if(status)
{
if(File::Exists(selectedfile))
System::IO::File::Delete(selectedfile);
else
MessageBox::Show("File does not exist.");
}
else
{
if(!System::IO::Directory::Exists(selectedfile))
MessageBox::Show("The directory does not exists.");
try{
System::IO::Directory::Delete(selectedfile,true);
if(System::IO::Directory::Exists(selectedfile))
{
deleted =false;
System::IO::Directory::Delete(selectedfile,true);
}
else
deleted = true;
}
我在Directory循环中包含了第二个删除,因为首次尝试时不删除该文件夹,只删除该文件夹中的文件。但是,每当我尝试删除空文件夹时,我都会拒绝访问。
如何确保删除目录及其所有内容。
答案 0 :(得分:1)
这很常见,是多任务操作系统需要做的事情之一。该目录实际上已标记为删除,但由于一个或多个进程在目录上打开了句柄,因此无法将其删除。在Windows的情况下,这通常是使用该目录作为其默认工作目录的过程。或者你可能已经打开了一个资源管理器窗口,看看你的程序是如何工作的。 Explorer使用ReadDirectoryChangesW()来获取有关目录更改的通知,以便知道何时刷新视图。
最后一个句柄关闭后,目录将从驱动器中物理移除。虽然它存在于这种僵尸状态,但任何对目录执行任何操作的尝试都将产生访问错误(Windows错误代码5)。
您需要在程序中考虑此行为。绝对删除第二个Directory :: Exists()测试,当您没有从Delete调用中获得异常时,您需要假设该目录已被删除。这最终将是准确的。
答案 1 :(得分:0)
您需要在计算机A和B上使用文件服务器功能,并在计算机C上编写客户端。
服务器可以是一种FTP服务器,您必须明确配置在两个站点上处理哪些目录。
服务器可以是Windows共享。您可以使用UNC文件名来处理这些文件并在计算机C上使用Windows API。当您在计算机C上映射网络驱动器时,您可以像处理本地文件一样使用网络文件。
必须配置计算机A和B,以便共享具有足够权限。