#include "StdAfx.h"
#include "filedeleteresponse.h"
#include "Dir.h"
#include "connection.h"

CFileDeleteResponse::CFileDeleteResponse(CServer *server,CWorkspaceAccess context,CRequest request,CAlias alias)
: CNormalResponse(server,context,request,alias)
{
	//	実は無いとか
	if(alias.IsExist()==0)
		throw new CSystemResponse(server,context,"指定されたファイルは存在しません",404);
}

CFileDeleteResponse::~CFileDeleteResponse(void)
{
}

/*
	レスポンス生成
*/
void CFileDeleteResponse::CreateResponse()
{
	//	レスポンスコード
	SetResponseCode(204);

	if(m_alias.IsDirectory())
	{
		CDir	find;
		find.FindFile(m_alias.GetTarget() + "*.*",TRUE);

		for(int i=0;i<find.GetFileCount();i++)
			::DeleteFile(find.GetFilePath(i));

		CDir	find2;
		find.FindDir(m_alias.GetTarget() + "*.*");

		for(int i=0;i<find.GetFileCount();i++)
			::RemoveDirectory(find.GetFilePath(i));

		if(::RemoveDirectory(m_alias.GetTarget())==0)
			throw CServerFatalException("ディレクトリの操作に失敗しました、システムエラーです");
	}
	else
	{
		if(::DeleteFile(m_alias.GetTarget())==0)
			throw CServerFatalException("ファイルの操作に失敗しました、システムエラーです");
	}
}


/*!
	レスポンスサイズの取得
*/
__int64 CFileDeleteResponse::GetResponseSize()
{
	return(0);
}

/*!
	レスポンスの取得
*/
int CFileDeleteResponse::GetNextData(CBuffer &data)
{
	data.ReSize(0);
	return(0);
}

