程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> code block與VC++下相對路徑的不同寫法

code block與VC++下相對路徑的不同寫法

編輯:C++入門知識

最近想不借用超級寶典第五版的封裝類自己完整寫一個著色器,但是一直讀取shader文件失敗,原因在於相對路徑的寫法錯誤。

codeblock 下如下寫即可讀取


#include 
#include 

char *ReadText(char *fn);

int main()
{
    char *ff;
    ff=ReadText("first.vert");
    printf("%s\n",ff);
    return 0;
}

char *ReadText(char *fn)
{
	FILE *fp;
	char *content = NULL;

	int count=0;

	if (fn != NULL)
	{
		fp = fopen(fn,"rt");

		if (fp != NULL)
		{

      fseek(fp, 0, SEEK_END);  // 重定位流(數據流/文件)上的文件內部位置指針
	                           // int fseek(FILE *stream, long offset, int fromwhere);
      count = ftell(fp);       // long ftell(FILE *stream); 返回當前文件指針,是int類型
      rewind(fp);  // void rewind(FILE *stream); 將文件內部的位置指針重新指向一個流(數據流/文件)的開頭

			if (count > 0)
			{
				content = (char *)malloc(sizeof(char) * (count+1));  // extern void *malloc(unsigned int num_bytes);
				count = fread(content,sizeof(char),count,fp);  // 從一個流中讀數據   
     //函數原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); 
// 				    buffer
// 					Storage location for data.
//
// 					size
// 					Item size in bytes.
//
// 					count
// 					Maximum number of items to be read.
//
// 					stream
// 					Pointer to FILE structure.

				content[count] = '\0';
			}
			fclose(fp);
		}
	}
	return content;

}

當前目錄的寫法為。

ff=ReadText("first.vert");

VC++2008則不同。

當前目錄的寫法為

ff=ReadText("../first.vert");

源代碼如下:

#include 
#include 

char *ReadText(char *fn);

int main()
{
    char *ff;
    ff=ReadText("../first.vert");
    printf("%s\n",ff);
	getchar();
    return 0;
}

char *ReadText(char *fn)
{
	FILE *fp;
	char *content = NULL;

	int count=0;

	if (fn != NULL)
	{
		fp = fopen(fn,"rt");

		if (fp != NULL)
		{

      fseek(fp, 0, SEEK_END);  // 重定位流(數據流/文件)上的文件內部位置指針
	                           // int fseek(FILE *stream, long offset, int fromwhere);
      count = ftell(fp);       // long ftell(FILE *stream); 返回當前文件指針,是int類型
      rewind(fp);  // void rewind(FILE *stream); 將文件內部的位置指針重新指向一個流(數據流/文件)的開頭

			if (count > 0)
			{
				content = (char *)malloc(sizeof(char) * (count+1));  // extern void *malloc(unsigned int num_bytes);
				count = fread(content,sizeof(char),count,fp);  // 從一個流中讀數據   
     //函數原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); 
// 				    buffer
// 					Storage location for data.
//
// 					size
// 					Item size in bytes.
//
// 					count
// 					Maximum number of items to be read.
//
// 					stream
// 					Pointer to FILE structure.

				content[count] = '\0';
			}
			fclose(fp);
		}
	}
	return content;

}

如果訪問上層文件則一次後退即可。

../name1/*.txt

更進一步請看如下兩篇帖子:

http://blog.csdn.net/sszgg2006/article/details/8447176
http://bbs.csdn.net/topics/80326375


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved