MFC中如何加入数据文件(。txt)?

时间:2022-09-21 19:12:34
我写了一个小游戏,编译运行成功了。但是发给另外的电脑编译时,找不到游戏运行时加载的文件(*.txt)。

我该怎么解决这个问题?

MFC是不是有运行时获取路径的函数?

或者一次性,直接把(*.txt)加载到*.exe,发给别人只要*.txt就行了?

高速赐教,谢谢

22 个解决方案

#1


你把(*.txt)文件和*.exe放在同一目录下,发给别人
在读(*.txt)文件的代码中改成相对路径, 比如,读(*.txt)的函数为ReadFile("*.txt")

#2


没看懂你到底要问什么……
建议你加个打开文件对话框!

#3


把.txt文件一起发给他,程序里面不要用绝对路径,用相对路径

#4


引用 1 楼 lizhigang34 的回复:
你把(*.txt)文件和*.exe放在同一目录下,发给别人 
在读(*.txt)文件的代码中改成相对路径, 比如,读(*.txt)的函数为ReadFile("*.txt")


你说的是CFile 类。

现在的问题是:你把文件发给别人,应该随便放在那都可以运行的吧?难道告诉别人,这个这个文件要存在哪哪哪哪才有用?

#5


相对路径?

#6


最简单的方法就是把程序所需的.txt文件也发过去

#7


你的(*.txt)文件保存的应该是游戏的地图或别的东西吧,你在加载(*.txt)文件时,不要指定这个文件的路径??
我说的是相对*.exe的路径,不是那种绝对路径F:\\..\\(*.txt)

#8


你的程序中读*.txt文件的路径不能直接写成readfile("*.txt"),而应该写成readfile(".\\*.txt"),然后发布时将exe和txt文件放在一起。

#9


把txt中的内容编译成资源放到exe中,这样只需要发一个exe就可以了

#10


7楼的意思是我把

        CFile f;
char* pFileName = "G:\\8x9.txt";
if( !f.Open( pFileName, CFile::modeRead, &e ) )
{
AfxMessageBox( "File could not be opened " );
}

写成

        CFile f;
char* pFileName = "8x9.txt";
if( !f.ReadFile( pFileName, CFile::modeRead, &e ) )
{
AfxMessageBox( "File could not be opened " );
}




是这个意思吗?

#11


如何写到资源中?能不能具体点?

#12


关于路径,程序会按下面的顺序查找
1) 包含调用进程的. e x e 文件的目录。

2) 调用进程的当前目录。

3) Wi n d o w s 的系统目录。

4) Wi n d o w s 目录。

5) PAT H 环境变量中列出的目录。

所以你的f.open()就可以写成f.open("*.txt"),注意,发布的时候也要把*.txt文件和*.exe放在同一目录下.
你可以试试,用原来的绝对路径,把你的*.txt这个文件换个位置,程序就会出错..而用户不知道你的*.txt应该放哪才正确,所以,还不如直接把它放在和*.exe同一目录下,发布的时候一起发布..

#13


十分感谢“lizhigang34”!

不知道那位能不能解释一下把txt文件写成资源的方法的?

#14


不知你的*.txt保存的是什么,一般都是和程序一块发布,你为什么非要把它写成资源呢..
玩过传奇没,看看它下面是不是有个文件夹"map\\..."

#15


其实你的方法解决问题了。但是我想知道写入资源这个方法,以后肯定能用上。比如讲你的程序数据不想让别人知道。有时候数据比代码更重要呢!

#16


有没有那位高手指点下,如何把数据写入资源?

没有的话中午结贴了。

#17


把数据写入资源,那你的意思就说生成EXE之后就再不需要导入这个txt了。

那很简单,你可以把txt的内容直接复制到代码中,做成一段字符串,然后程序再一开始运行时就把这段字符串生成一个文件。然后你程序就不用再改动什么了,原来是怎样就继续怎样。

#18


假如你不想让别知道数据的话,可以考虑active 控件 或者 DLL。

#19


引用 17 楼 san_77227487 的回复:
把数据写入资源,那你的意思就说生成EXE之后就再不需要导入这个txt了。 

那很简单,你可以把txt的内容直接复制到代码中,做成一段字符串,然后程序再一开始运行时就把这段字符串生成一个文件。然后你程序就不用再改动什么了,原来是怎样就继续怎样。

这个方法也太。。。。。

如果数据不小怎么办?
单独放一个文件还不如就用txt算了。

#20


那样程序运行不是很占用资源

#21


你可以定义一个庞大的数组玩玩, 把文件内容全部存进去。

#22


我的游戏要用txt文件就是一个庞大数组!

#1


你把(*.txt)文件和*.exe放在同一目录下,发给别人
在读(*.txt)文件的代码中改成相对路径, 比如,读(*.txt)的函数为ReadFile("*.txt")

#2


没看懂你到底要问什么……
建议你加个打开文件对话框!

#3


把.txt文件一起发给他,程序里面不要用绝对路径,用相对路径

#4


引用 1 楼 lizhigang34 的回复:
你把(*.txt)文件和*.exe放在同一目录下,发给别人 
在读(*.txt)文件的代码中改成相对路径, 比如,读(*.txt)的函数为ReadFile("*.txt")


你说的是CFile 类。

现在的问题是:你把文件发给别人,应该随便放在那都可以运行的吧?难道告诉别人,这个这个文件要存在哪哪哪哪才有用?

#5


相对路径?

#6


最简单的方法就是把程序所需的.txt文件也发过去

#7


你的(*.txt)文件保存的应该是游戏的地图或别的东西吧,你在加载(*.txt)文件时,不要指定这个文件的路径??
我说的是相对*.exe的路径,不是那种绝对路径F:\\..\\(*.txt)

#8


你的程序中读*.txt文件的路径不能直接写成readfile("*.txt"),而应该写成readfile(".\\*.txt"),然后发布时将exe和txt文件放在一起。

#9


把txt中的内容编译成资源放到exe中,这样只需要发一个exe就可以了

#10


7楼的意思是我把

        CFile f;
char* pFileName = "G:\\8x9.txt";
if( !f.Open( pFileName, CFile::modeRead, &e ) )
{
AfxMessageBox( "File could not be opened " );
}

写成

        CFile f;
char* pFileName = "8x9.txt";
if( !f.ReadFile( pFileName, CFile::modeRead, &e ) )
{
AfxMessageBox( "File could not be opened " );
}




是这个意思吗?

#11


如何写到资源中?能不能具体点?

#12


关于路径,程序会按下面的顺序查找
1) 包含调用进程的. e x e 文件的目录。

2) 调用进程的当前目录。

3) Wi n d o w s 的系统目录。

4) Wi n d o w s 目录。

5) PAT H 环境变量中列出的目录。

所以你的f.open()就可以写成f.open("*.txt"),注意,发布的时候也要把*.txt文件和*.exe放在同一目录下.
你可以试试,用原来的绝对路径,把你的*.txt这个文件换个位置,程序就会出错..而用户不知道你的*.txt应该放哪才正确,所以,还不如直接把它放在和*.exe同一目录下,发布的时候一起发布..

#13


十分感谢“lizhigang34”!

不知道那位能不能解释一下把txt文件写成资源的方法的?

#14


不知你的*.txt保存的是什么,一般都是和程序一块发布,你为什么非要把它写成资源呢..
玩过传奇没,看看它下面是不是有个文件夹"map\\..."

#15


其实你的方法解决问题了。但是我想知道写入资源这个方法,以后肯定能用上。比如讲你的程序数据不想让别人知道。有时候数据比代码更重要呢!

#16


有没有那位高手指点下,如何把数据写入资源?

没有的话中午结贴了。

#17


把数据写入资源,那你的意思就说生成EXE之后就再不需要导入这个txt了。

那很简单,你可以把txt的内容直接复制到代码中,做成一段字符串,然后程序再一开始运行时就把这段字符串生成一个文件。然后你程序就不用再改动什么了,原来是怎样就继续怎样。

#18


假如你不想让别知道数据的话,可以考虑active 控件 或者 DLL。

#19


引用 17 楼 san_77227487 的回复:
把数据写入资源,那你的意思就说生成EXE之后就再不需要导入这个txt了。 

那很简单,你可以把txt的内容直接复制到代码中,做成一段字符串,然后程序再一开始运行时就把这段字符串生成一个文件。然后你程序就不用再改动什么了,原来是怎样就继续怎样。

这个方法也太。。。。。

如果数据不小怎么办?
单独放一个文件还不如就用txt算了。

#20


那样程序运行不是很占用资源

#21


你可以定义一个庞大的数组玩玩, 把文件内容全部存进去。

#22


我的游戏要用txt文件就是一个庞大数组!