Ir ao conteúdo

Posts recomendados

Postado

 Como eu faço pra checar se um arquivo ou programa ta aberto?

Por exemplo eu crio um arquivo .txt e abro ele, no meu programa em C eu checo se ele ta aberto, se tiver checa de novo e se não tiver retorna 1.

 

  • Curtir 1
Postado

@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 1
Postado

Faça o que @devair1010 disse, apenas cheque se o valor retornado pelo fopen é igual a NULL(0)

FILE* arquivo = fopen("meuarquivo.txt", "r");

if (arquivo == NULL)
     printf("Erro ao abrir o arquivo, %d\n", GetLastError()); // Mostra a mensagem de erro e o código do erro

 

  • Curtir 2
Postado

@Gnomo Psicodélico por que você simplesmente não usa a função system para executar os comandos do .bat em vez de criar um arquivo .bat?

 

system("shutdown -r -t 30"); // Apenas coloque o comando do .bat dentro das " "

 

  • Curtir 2
Postado

@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
Postado

A função system não mostra a janela do cmd, e também não é a melhor opção para isso, você pode usar funções da própria linguagem C para fazer isso como a função RemoveDirectory(para pastas) e a função remove(para arquivos) ou a função DeleteFile.

 

 

  • Curtir 2
Postado

@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
Postado

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

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...