Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gnomo Psicodélico

C Como checar se um arquivo ta aberto

Recommended Posts

 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Editado por cyer
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

 

Editado por cyer
  • Curtir 2

Compartilhar este post


Link para o post
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

Editado por Gnomo Psicodélico
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@cyer  rmdir,removedirectory,etc... Todas só deletam a pasta se não tiver nada dentro dela, eu queria alguma forma de remover a pasta com tudo que tem dentro sem ter que remover de forma manual arquivo por arquivo de cada pasta

  • Curtir 1

Compartilhar este post


Link para o post
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;
}

 

Editado por cyer
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@cyer  Obrigado cyer, de tanto pesquisar acabei achando uma função que não conhecia e fazendo de uma forma mais simples (WinExec("cmd /C del /S /Q BD\\TV\\C1",SW_HIDE);)
 Mesmo assim muito obrigado por tentar ajudar

Editado por Gnomo Psicodélico
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×