Как получить размер файла в Visual C ++? - PullRequest
0 голосов
/ 05 мая 2010

Ниже мой код. Моя проблема в том, что мой конечный файл всегда содержит намного больше строк, чем исходный файл. Затем внутри цикла вместо использования i < sizeof more я понял, что должен использовать i < sizeof file2. Теперь моя проблема в том, как получить размер file2?

int i = 0;

FILE *file2 = fopen(LOG_FILE_NAME,"r");
wfstream file3 (myfile, ios_base::out);


// char more[1024];
char more[SIZE-OF-file2];


for(i = 0; i < SIZE-OF-file2 ; i++)
{       
    fgets(more, SIZE-OF-file2, file2);
    file3 << more;
}

fclose(file2);
file3.close();

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Самый простой способ - это fseek до конца файла и использование ftell для получения смещения. Другие (stat) функции также делают это, но они не кроссплатформенные. Конечно, если вы хотите, чтобы ваш код гнил в аду, вы также можете использовать GetFileSize () .

fseek(file, 0, SEEK_END);
off_t offset = ftell(file);
fseek(file, 0, SEEK_SET);

Каждый раз, когда вы называете C Visual C, или C ++ Visual C ++, я немного умираю.

1 голос
/ 05 мая 2010

Вы можете сделать это, используя GetFileSize (). Читая размер файла из файловой системы, вы избежите большого количества ненужных вычислений. Это также можно сделать с помощью _stat (), или в Unix это будет просто stat ().

Вот определение:

DWORD WINAPI GetFileSize ( __ в РУЧКЕ hFile, __out_opt LPDWORD lpFileSizeHigh );

Документ для GetFileSize:

http://msdn.microsoft.com/en-us/library/aa364955%28VS.85%29.aspx

В качестве альтернативы вы можете использовать _stat ()

Документ для статистики: http://msdn.microsoft.com/en-us/library/14h5k7ff%28VS.80%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...