用c写一个获取一个文件里的字节数
时间: 2024-01-22 14:20:54 浏览: 59
以下是使用 C 语言编写获取一个文件中字节数的示例代码:
```c
#include <stdio.h>
int main() {
FILE *fp;
long byte_count;
fp = fopen("file.txt", "rb"); // 打开文件,以二进制模式读取
if (fp == NULL) {
printf("文件打开失败!");
return 1;
}
// 移动文件指针到末尾,获取文件大小
fseek(fp, 0L, SEEK_END);
byte_count = ftell(fp);
fclose(fp);
printf("文件大小为 %ld 字节", byte_count);
return 0;
}
```
此代码中,我们使用 `fopen()` 函数打开一个文件(假设文件名为 `file.txt`),并以二进制模式读取。如果文件打开失败,则输出错误信息并退出程序。接下来,使用 `fseek()` 函数将文件指针移动到文件末尾,然后使用 `ftell()` 函数获取当前文件指针位置,即文件大小。最后,关闭文件并输出文件大小。
需要注意的是,由于一些操作系统中使用不同的文件编码方式,因此获取的字节数可能会与实际文件大小略有不同。此外,如果文件太大,可能会导致 `ftell()` 函数返回的文件大小不准确,可以考虑使用其他方法获取文件大小。
相关问题
用C语言写一个读取wav文件的程序
好的,以下是一个简单的读取wav文件的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char chunk_id[4];
int chunk_size;
char format[4];
} ChunkHeader;
typedef struct {
char subchunk1_id[4];
int subchunk1_size;
short audio_format;
short num_channels;
int sample_rate;
int byte_rate;
short block_align;
short bits_per_sample;
} FormatSubchunk;
typedef struct {
char subchunk2_id[4];
int subchunk2_size;
} DataSubchunk;
int main() {
FILE *wav_file = fopen("test.wav", "rb");
if (!wav_file) {
printf("Failed to open file.\n");
return 1;
}
ChunkHeader chunk_header;
FormatSubchunk format_subchunk;
DataSubchunk data_subchunk;
fread(&chunk_header, sizeof(ChunkHeader), 1, wav_file);
fread(&format_subchunk, sizeof(FormatSubchunk), 1, wav_file);
fread(&data_subchunk, sizeof(DataSubchunk), 1, wav_file);
printf("File format: %s\n", format_subchunk.audio_format == 1 ? "PCM" : "Unknown");
printf("Channels: %d\n", format_subchunk.num_channels);
printf("Sample rate: %d Hz\n", format_subchunk.sample_rate);
printf("Bits per sample: %d\n", format_subchunk.bits_per_sample);
int num_samples = data_subchunk.subchunk2_size / (format_subchunk.bits_per_sample / 8);
short *data = malloc(num_samples * sizeof(short));
fread(data, sizeof(short), num_samples, wav_file);
// Do something with the audio data
fclose(wav_file);
free(data);
return 0;
}
```
这个程序使用了三个结构体来解析wav文件的格式信息:
- `ChunkHeader`:包含了RIFF块的信息,包括块标识符、块大小以及文件格式。
- `FormatSubchunk`:包含了格式子块的信息,包括子块标识符、子块大小、音频格式、声道数、采样率、字节率、块对齐方式以及每个样本的位数。
- `DataSubchunk`:包含了数据子块的信息,包括子块标识符和子块大小。
程序首先打开了一个wav文件,然后读取了三个结构体,分别对应wav文件的三个块。接着,程序输出了一些文件格式的信息,包括音频格式、声道数、采样率和每个样本的位数。最后,程序读取了音频数据并将其存储在一个short类型的数组中,可以在数组中进行进一步的处理。最后,程序关闭文件并释放分配的内存。
请注意,这只是一个简单的示例程序,实际上,解析wav文件需要更多的处理和错误检查。
c语言读取.bin文件一个字节
要在C语言中读取一个二进制文件的一个字节,可以使用标准库函数fread()。以下是一个简单的示例代码:
```c
#include <stdio.h>
int main() {
FILE *fp;
unsigned char byte;
fp = fopen("example.bin", "rb");
if (fp == NULL) {
printf("Failed to open file\n");
return -1;
}
fread(&byte, sizeof(byte), 1, fp);
printf("Byte read: 0x%x\n", byte);
fclose(fp);
return 0;
}
```
这段代码打开名为“example.bin”的二进制文件,读取一个字节到变量byte中,并打印该字节的十六进制表示。请注意,文件必须以二进制模式打开(即使用“rb”标志)。