Você está aqui: C++ ::: Win32 API (Windows API) ::: Arquivos e Diretórios |
Arquivos e diretórios em C++ - Como escrever em arquivos usando a função WriteFile() da API do WindowsQuantidade de visualizações: 9052 vezes |
A função WriteFile() da Win32 API é útil quando precisamos escrever em arquivos. Esta função foi projetada para escritas síncronas e assíncronas, enquanto WriteFileEx() é somente para escritas assíncronas. Veja o protótipo desta função: BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); Antes de escrevermos em um arquivo, é importante entendermos o significado dos parâmetros da função WriteFile(): a) HANDLE hFile - Este é o handle para o arquivo no qual queremos escrever. Este handle deve ser criado com os direitos de acesso de escrita GENERIC_WRITE. b) LPCVOID lpBuffer - Um ponteiro para o buffer que contém os dados que serão escritos no arquivo. c) DWORD nNumberOfBytesToWrite - O número de bytes a serem escritos no arquivo. d) LPDWORD lpNumberOfBytesWritten - Um ponteiro para uma variável que receberá o número de bytes escritos. A função WriteFile() define o valor desta variável como zero antes de fazer seu trabalho ou verificação de erro. d) LPOVERLAPPED lpOverlapped - Um ponteiro para um estrutura OVERLAPPED. Esta estrutura é exigida se o handle para o arquivo for obtido usando FILE_FLAG_OVERLAPPED para o parâmetro dwFlagsAndAttributes da função CreateFile(). Geralmente usamos NULL para este parâmetro. Veja um trecho de código no qual usamos a função WriteFile() para escrever duas linhas em um arquivo texto: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <cstdlib> #include <iostream> #include <windows.h> using namespace std; int main(int argc, char *argv[]){ // dados a serem escritos no arquivo CHAR frase[80]; DWORD nOut; // bytes escritos // nome do arquivo CHAR arquivo[] = "C:\\testes.txt"; // vamos abrir o arquivo para escrita. // se o arquivo não existir nós vamos criá-lo. HANDLE hArquivo = CreateFile(arquivo, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hArquivo == INVALID_HANDLE_VALUE){ cout << "Erro ao abrir o arquivo: " << GetLastError() << endl; } else{ // arquivo aberto com sucesso. Vamos escrever // dados a serem escritos no arquivo CHAR frase1[80] = "Programar em C++ é bom demais\r\n"; CHAR frase2[80] = "E a Win32 é da hora!!!!"; DWORD nOut; // bytes escritos // vamos escrever a primeira frase WriteFile(hArquivo, frase1, strlen(frase1), &nOut, NULL); cout << nOut << " bytes foram escritos. " << endl; // vamos escrever a segunda frase WriteFile(hArquivo, frase2, strlen(frase2), &nOut, NULL); cout << nOut << " bytes foram escritos. " << endl; } // vamos fechar o handle CloseHandle(hArquivo); system("PAUSE"); return EXIT_SUCCESS; } |
Link para compartilhar na Internet ou com seus amigos: |
C++ ::: Dicas & Truques ::: Strings e Caracteres |
Como inverter uma string em C++ usando as funções begin(), end() e reverse()Quantidade de visualizações: 13183 vezes |
Em várias situações nós precisamos inverter a ordem dos caracteres de uma palavra, frase ou texto em C++. Para isso nós podemos usar uma combinação das funções begin(), end() e reverse() da biblioteca padrão do C++. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> #include <algorithm> using namespace std; // função principal do programa C++ int main(int argc, char *argv[]){ // vamos declarar um objeto da classe string string frase = "Gosto de programar em C++"; // vamos mostrar a string original cout << "String original: " << frase << endl; // agora vamos usar a função reverse() para inverter o // conteúdo da string reverse(frase.begin(), frase.end()); // e mostramos o resultado cout << "String invertida: " << frase << endl;; cout << "\n" << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executarmos este código C++ nós teremos o seguinte resultado: String original: Gosto de programar em C++ String invertida: ++C me ramargorp ed otsoG |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Strings e Caracteres |
Exercícios Resolvidos de C++ - Como retornar o código ASCII associado a um caractere em C++ - Ler um caractere e retornar o código ASCII correspondenteQuantidade de visualizações: 508 vezes |
Pergunta/Tarefa: Escreva um programa C++ que pede para o usuário informar um caractere (letra ou número) e mostre o código ASCII correspondente. Sua saída deverá ser parecida com: Informe um caractere: A Você informou o caractere: A O código ASCII correspondente é: 65 Veja a resolução comentada deste exercício em C++: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; // função principal do programa int main(int argc, char *argv[]){ // variáveis usadas na resolução do problema char caractere; int codigo; // vamos pedir para o usuário informar uma letra, símbolo ou pontuação cout << "Informe um caractere: "; // vamos ler o caractere informado cin >> caractere; // agora vamos obter o código ASCII correspondente codigo = (int)caractere; // e mostramos o resultado cout << "Você informou o caractere: " << caractere << endl; cout << "O código ASCII correspondente é: " << codigo << endl; cout << "\n" << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } O Código Padrão Americano para o Intercâmbio de Informação (do inglês American Standard Code for Information Interchange - ASCII, pronunciado [áski]) é um sistema de representação de letras, algarismos e sinais de pontuação e de controle, através de um sinal codificado em forma de código binário (cadeias de bits formada por vários 0 e 1), desenvolvido a partir de 1960, que representa um conjunto de 128 sinais: 95 sinais gráficos (letras do alfabeto latino, algarismos arábicos, sinais de pontuação e sinais matemáticos) e 33 sinais de controle, utilizando 7 bits para representar todos os seus símbolos. |
C++ ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular juros simples e montante usando C++Quantidade de visualizações: 19583 vezes |
O regime de juros será simples quando o percentual de juros incidir apenas sobre o valor principal. Sobre os juros gerados a cada período não incidirão novos juros. Valor Principal ou simplesmente principal é o valor inicial emprestado ou aplicado, antes de somarmos os juros. Transformando em fórmula temos: J = P . i . n Onde: J = juros P = principal (capital) i = taxa de juros n = número de períodos Imaginemos uma dívida de R$ 2.000,00 que deverá ser paga com juros de 5% a.m. pelo regime de juros simples e o prazo para o pagamento é de 2 meses. O cálculo em C++ pode ser feito assim: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]) { float principal = 2000.00; float taxa = 0.08; int meses = 2; float juros = principal * taxa * meses; cout << "O total de juros a ser pago é: " << juros << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } O montante da dívida pode ser obtido das seguintes formas: a) Montante = Principal + Juros b) Montante = Principal + (Principal x Taxa de juros x Número de períodos) M = P . (1 + (i . n)) Veja o código: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]) { float principal = 2000.00; float taxa = 0.08; int meses = 2; float juros = principal * taxa * meses; float montante = principal * (1 + (taxa * meses)); cout << "O total de juros a ser pago é: " << juros << "\n"; cout << "O montante a ser pago é: " << montante << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Raio Hidráulico Qual é o raio hidráulico em um canal de seção retangular com 2,00 m de largura por 1,20 m de altura? Considere que este canal está preenchido com 1/3 de água da sua capacidade. A) 0,10 m B) 0,29 m C) 0,19 m D) 2,29 m E) 0,39 m Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Vigas a flexão simples: seções retangulares O objetivo do dimensionamento de estruturas de concreto é obter segurança e economia. Muitas vezes, o projeto arquitetônico não possibilita vigas muito altas para grandes vãos. Uma solução adotada para esse tipo de situação, quando o concreto da seção da viga mais solicitada pode não resistir ao esforço de compressão, é adotar armadura dupla. Considere que uma viga V (20x30) tem uma solicitação de momento fletor de 65,20kN.m. O concreto utilizado nessa viga tem resistência de 30MPa e a agressividade ambiental do local é classe II (considere que é uma viga pouco solicitada). Das alternativas a seguir, assinale aquela que apresenta a área de aço da armadura comprimida dessa viga. A) 1,48cm2. B) 1,94cm2. C) 5,48cm2. D) 7,83cm2. E) 9,77cm2. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Postura ética profissional A resolução de dilemas éticos deve ser resultado de um processo de reflexão e análise, integrando valores morais e fatos para buscar uma solução moralmente correta. Segundo Holtzapple e Reece (2006), quais os aspectos fundamentais para a resolução de dilemas éticos? Assinale a alternativa correta: A) Ter clareza moral, ter clareza conceitual, manter-se parcial, conhecer todas as alternativas viáveis, ter razoabilidade. B) Ter clareza moral, ter imprecisão conceitual, manter-se atualizado, conhecer todas as alternativas viáveis, ter razoabilidade. C) Ter clareza moral, ter clareza conceitual, manter-se parcial, considerar exclusivamente as alternativas lucrativas, ter razoabilidade. D) Ter variabilidade moral, ter clareza conceitual, manter-se alheio, conhecer todas as alternativas viáveis, ter razoabilidade. E) Ter clareza moral, ter clareza conceitual, manter-se atualizado, conhecer todas as alternativas viáveis, ter razoabilidade. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Formas: Confecção e colocação Durante a execução e cura de estruturas em concreto armado, as formas são submetidas a diversos tipos de solicitações, desde a montagem, passando pelo lançamento do concreto, peso da massa e armadura, etc. Sobre esses esforços, assinale a alternativa correta. A) As formas dos pilares são mais solicitadas por cargas verticais. B) As formas de lajes são mais solicitadas por cargas horizontais. C) O peso da armadura é o principal esforço sobre qualquer tipo de forma. D) As formas das vigas são mais solicitadas por esforços verticais. E) O peso da armadura é determinante no dimensionamento da forma de vigas. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais |
Instalações prediais de combate a incêndio A aspersão de água por meio de chuveiros automáticos é uma técnica eficiente para combater o princípio de incêndio. A norma NBR 10897, que estabelece os parâmetros mínimos para o projeto e a instalação de sistemas de proteção contra incêndio por chuveiros automáticos, classifica os sistemas de chuveiros automáticos em quatro tipos básicos. Analise os tipos de sistemas de chuveiros automáticos listados a seguir e associe-os com as suas respectivas características: 1) Sistema de ação prévia 2) Sistema de tubo seco 3) Sistema de dilúvio 4) Sistema de tubo molhado ( ) É indicado para locais em que não há risco de congelamento da água na tubulação. ( ) É caracterizado pelo tempo prolongado entre a abertura do chuveiro automático e a descarga de água. ( ) Demanda um sistema suplementar de detecção, que deve ser instalado na mesma área dos chuveiros automáticos. ( ) Os chuveiros ficam abertos e funcionam apenas quando a água entra na tubulação após o acionamento de uma válvula. Assinale a alternativa que apresenta a sequência correta: A) 1, 2, 3, 4. B) 4, 3, 2, 1. C) 3, 2, 1, 4. D) 2, 3, 4, 1. E) 4, 2, 1, 3. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |