C'è una funzione in C ++ che crea un file .bin, o si tratta di codice manca qualcosa?

StackOverflow https://stackoverflow.com/questions/908555

  •  05-09-2019
  •  | 
  •  

Domanda

Ho un codice che assomiglia a questo:

int main () {
  fstream file;
  file.open("test.bin", ios::out | ios::binary);
  if(!file.is_open())
  {
      return -1;
  }
  int n = 3;
  file.write(reinterpret_cast<char*>(&n), sizeof(n));
  file.close();
  return 0;
}

quando l'eseguo da sola, esce con -1, quindi ovviamente non è riuscito ad aprire "test.bin". Tuttavia, se si salva un file blocco note in bianco come "test.bin", ed eseguirlo, funziona benissimo. Quello che mi chiedo è come posso ottenere il mio programma C ++ per generare automaticamente un file vuoto "test.bin" Non se un file chiamato "test.bin" esiste già.

È stato utile?

Soluzione

Il frammento di codice è sbagliato in quanto si sta cercando di scrivere in un file che hai aperto per l'input. Se si desidera scrivere sul file, è sufficiente utilizzare ios::out invece di ios::in.

Se si desidera aprire il file per la lettura, ma crearlo se non esiste, è possibile utilizzare:

file.open("test.bin", ios::in | ios::binary);
if(!file.is_open()) {
    file.open("test.bin", ios::out | ios::binary);
    int n = 3;
    file.write(reinterpret_cast<char*>(&n), sizeof(n));
    file.close();
    file.open("test.bin", ios::in | ios::binary);
    if(!file.is_open()) {
        return -1;
    }
}

In questo modo inizializzare il file con il numero intero 3 come il contenuto di default, se non esiste già.

Se esiste, lascerà il contenuto solo. In entrambi i casi, avrete il file aperto al primo byte.

Altri suggerimenti

Mi piacerebbe presumo si potrebbe probabilmente solo farlo aprendo e chiudendo un file:

if (GetFileAttributes("test.bin") == INVALID_FILE_ATTRIBUTES)
{
    fstream file;
    file.open("test.bin", ios::out);
    file.close();
}

Una possibilità è quella di aprire in lettura / scrittura e cercare l'inizio del file.

Poi, si può leggere, scrivere o fare tutto ciò che si desidera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top