Ir ao conteúdo
  • Cadastre-se

C Como checar se um arquivo ta aberto


Posts recomendados

@Gnomo Psicodélico para saber se o arquivo está aberto, você  verifica  ao abrir o arquivo para ler ,  com fopen  então se o arquivo for igual a NULL é porque  ele não está aberto .    mas não precisa checar duas vezes  pois se da primeira vez ele estiver aberto  então na segunda ele vai estar aberto do mesmo jeito, ou se não estiver aberto é a mesma coisa,  sendo que se você abrir o arquivo você precisa fecha-lo  e se abrir duas vezes  precisa fechar também duas vezes . 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@cyer  Porque estou fazendo isso para apagar umas pastas e sub-pastas do programa que eu criei de tv e não queria que aparecesse uma tela preta do DOS executando um comando, por isso eu crio o .bat e executo com ShellExecute em modo SW_HIDE.
Tem alguma forma de executar system em modo sw_hide?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@cyer  Eu sei remover pasta e arquivo, mas eu queria uma forma de remover pasta que contem arquivo dentro por isso criei um .bat pra remover, não achei nenhuma função que fizesse isso.
 A função system abre uma tela preta (prompt) quando é executada e depois que executa o comando ela fecha

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Primeiro apenas verifique se a pasta está vazia, se não estiver, você deleta.

#include <stdio.h>
#include <windows.h>

bool PastaVazia(const char* Caminho)
{
	WIN32_FIND_DATA pastaInfo = { 0 };

	HANDLE Pasta = FindFirstFileA(Caminho, &pastaInfo);

	if (Pasta == INVALID_HANDLE_VALUE)
		return false;

	do
	{
		// Verifica se o nome alternativo do arquivo é diferente de 0, se for igual a 0 significa que não existe
		if (pastaInfo.cAlternateFileName && pastaInfo.cAlternateFileName[0])
		{
			FindClose(Pasta);
			return false;
		}
	} while (FindNextFileA(Pasta, &pastaInfo));

	FindClose(Pasta);

	return true;
}

bool ApagarTodosArquivos(const char* Caminho)
{
	WIN32_FIND_DATA pastaInfo = { 0 };

	HANDLE Pasta = FindFirstFileA(Caminho, &pastaInfo);

	if (Pasta == INVALID_HANDLE_VALUE)
		return false;

	// Remove o *.* do caminho
	char CaminhoSemTipo[MAX_PATH] = { 0 };

	for (size_t i = strlen(Caminho) - 1; i--; )
	{
		if (Caminho[i] == '\\')
		{
			strncpy_s(CaminhoSemTipo, Caminho, i + 1);
			break;
		}
	}

	do
	{
		// Verifica se é a pasta atual
		if (pastaInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			continue;

		char d[MAX_PATH] = { 0 };

		// Copia o caminho sem o *.* para a d
		strcpy_s(d, CaminhoSemTipo);

		// Adiciona o nome do arquivo para o diretorio
		strcat_s(d, pastaInfo.cFileName);

		// Apaga o arquivo
		if (!DeleteFileA(d))
		{
			FindClose(Pasta);
			return false;
		}

	} while (FindNextFileA(Pasta, &pastaInfo));

	FindClose(Pasta);

	return true;
}

int main()
{

	bool Resultado = PastaVazia("C:\\Teste\\*.*");

	printf("Vazia: %i\n", Resultado); // *.* para checar todos os tipos de arquivos da pasta se existir arquivos nela


	if (!Resultado)
		ApagarTodosArquivos("C:\\Teste\\*.*");

	system("pause");

	return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...