当我到达文件中间时,我的代码会出现运行时错误。 如果我更改temp2或temp1的值,那么它会在文件的开头崩溃。 我无法理解我在此文件中所犯的错误。
它在一个有100行的小文件上顺利运行。
我正在创建一个文件搜索项目,所以我需要存储包含整个驱动器目录的大文件。
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
char file[99999];
void brek(char *p, char *q);
void main()
{
FILE *fp;
int x = 0, y = 0;
int a = 0, b = 0;
int g = 0;
char temp1[10000]; // temp1 is simply for jumping to the date against the given directory or file
// the main array storing the lines is temp2.
char temp2[1000][1000];
system("chdir C:\\Users\\Faraz\\Documents && dir /s > dir.txt");
fp = fopen("C:\\Users\\Faraz\\Documents\\dir.txt", "r");
while ((y = getc(fp)) != EOF)
{
file[x] = y;
x++;
}
fclose(fp);
file[x] = '\0';
puts(&file[0]);
// <----the copying of the file to the string "file (globally declared)"is
// done---->//
getche();
system("cls");
// <-------------------start loop-------------------->//
a = 0;
while (file[a] != '\0') // <-------starting of the loop
{
while (file[a] != '/')
{
temp1[a] = file[a];
a++;
}
temp1[a] = '\0';
a = a - 2;
b = 0;
while (file[a] != '\n')
{
temp2[g][b] = file[a];
b++;
a++;
}
temp2[g][b] = '\0';
puts(&temp2[g][0]);
g++;
}
// <-----------------end loop---------------------->//
}
答案 0 :(得分:0)
试试这个
int
main(int argc, char **argv)
{
LPWIN32_FIND_DATAA fdFile;
HANDLE hFind = NULL;
const char *sPath = "C:\\Users\\Faraz\\Documents\\*.*";
if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE)
{
printf("no such directory %s\n", sPath);
return -1;
}
do
{
printf("Directory: %s\n", fdFile->cFileName);
}
while(FindNextFile(hFind, &fdFile)); //Find the next file.
FindClose(hFind); //Always, Always, clean things up!
return 0;
}
答案 1 :(得分:0)
我发现答案是你只是无法在512 MB内存中加载1gb文件。 因此我们使用
在字符串顶部定义缓冲区大小#define BUFFER_SIZE 512
并且使用fgets我们逐行读取文件,因此不会重载由OS分配的内存空间。
当我们开始使用堆空间时,动态内存分配不是我们问题的解决方案。