c语言如何获得文件当前路径?

c语言如何获得文件当前路径?,第1张

C语言里
在main函数的第二个参数里面,
保存着当前程序运行的目录
也就是argv[0]
main( int argc, char argv[])
{
printf("%s ", argv[0] );
}
就是文件当前所在位置
不过需要注意的一点是
这个路径里面保存了当前文件的文件名
如果你只是需要路径的话还需要自己 *** 作一下
main(int a,char c[])
{
char s[100];
int i;
//把路径保存到字符串s里
strcpy(s,c[0]);
for(i=strlen(s); i>0 ; i--)
if( s[i] == '\\')
{
s[i]='\0';
break;
}
//找到最后一个 \ 并删除之后的内容
//最后输出的s,就是当前文件的路径了
puts(s);
}

fp=fopen(filename,"wb");
里的filename就表示了文件的路径及文件名,所以要把输入的文件名和文件路径拼接起来,计算出这个filename
最好过滤一下别让路径和文件名中有非法字符,比如:\/+<>什么的。
scanf也限制一下长度。
scanf("%19s",filename);
scanf("%19s",path);
参考如下:
#include <stdioh>
#include <stdlibh>
int main(void)
{
FILE fp;
char ch, filename[20], path[20],buffer[40];
printf("Enter the file name: ");
scanf("%s",filename);
printf("Enter the path: ");
scanf("%s",path);
sprintf(buffer, "%s\\%s", path,filename);
printf("\nto end input ,press Ctrl+Z in newline,then ENTER:\n");
if((fp=fopen(buffer,"wt+"))==NULL)
{
printf("no such path, \nstrike any key exit!");
getch();
exit(1);
}
while ((ch=getchar())!=-1) ch=fputc(ch,fp);
fclose(fp);
printf("==================================\n\n");
printf("file path \"%s\" \nfile name \"%s\":\nand its content:\n",path,filename);
fp=fopen(buffer,"rt");
while ((ch=fgetc(fp))!=-1) putchar(ch);
fclose(fp);
return 0;

C程序文件路径用双斜杠//

因为反单斜杠\在C/C++/C# 中是转义前导字符,例如 \n 代表换行。为了避免歧义,路径中的\必须用//。

1、C程序释义

(C程序相关书籍)

C语言是目前世界上最流行、使用最广泛的面向过程的高级程序设计语言。 C语言对 *** 作系统和系统使用程序以及需要对硬件进行 *** 作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。

2、关于C语言中的转义字符

所有的ASCII码都可以使用转义字符来表示,其中包括了常用的打印字符和一些具有特殊功能的非打印字符。 
在C语言中,打印字符,如字母、数字、空格等字符,可以直接使用引号包含这些字符即可构成字符或字符串数据。 
对于非打印字符,在引号中则必须使用转移字符来进行表示。

3、基本形式

首先转义字符和普通字符数据一样,只能够出现在单引号或者双引号中。并且转义字符都以\开头。 
转义字符有三种表示方式,分别是 
1 8进制 \加8进制数字 
2 16进制 \x加16进制数字 
3 特殊转义字符 \加有特殊意义的符号

注意:转义字符不存在10进制的书写形式。

4、数字转义

数字转义字符只能使用8进制和16进制。 
每个字符的转义数值分别对应了其ASCII码的值。 
例如:

字符

转义字符(8进制)

转义字符(16进制)

‘a’    ‘\141’    ‘\x61’  

‘+’    ‘\53’    ‘\x’  

‘0’    ‘\60’    ‘\x30’  

所有的ASCII字符都可以使用这种方式进行表示。 
在C语言中,如果想用ASCII码值的10进制方式输入字符。可以使用10进制整数直接给字符变量赋值,例如char a=97;同样这种方式能够输入所有的ASCII字符,但是这种方式只能对单个字符变量进行赋值,并不能够对整个字符串进行一次性赋值。

5、符号转义

打印字符,可以使用字符本身和数字转义两种方式表示。 
非打印字符,除了使用数字转义的方式表示外,也有另一种表示方式,特殊符号转义。 
这种转义方式由反斜杠和一个打印字符组成,用来表示一个非打印字符,常用相关的字符如下。

\a    响铃(BEL)    007    Alert  

\b    退格(BS) ,将当前位置移到前一列    008    Backspace  

\f    换页(FF),将当前位置移到下页开头    012    form feed  

\n    换行(LF) ,将当前位置移到下一行开头    010    line feed  

\r    回车(CR) ,将当前位置移到本行开头    013    return  

\t    水平制表(HT) (跳到下一个TAB位置)    009    Tab  

\v    垂直制表(VT)    011    vertical tab  

上面的字符中,需要特别注意三个字符。

\v垂直制表符 
在Windows控制台中,垂直制表符并不能够在控制台中直接打印想要的制表效果,而是以一个特殊的字符来表示。 
在Linux环境下,垂直制表符能够正常的实现垂直制表的效果。

\n和\r换行和回车 
在日常的使用中,我们经常习惯性的将换行和回车等同起来。换行就是回车,回车就是换行。或者说,回车用来换行,这里的回车更多的是指键盘上的Enter键。 
实际上,回车和换行是两个不同的概念。 
这个字符的产生和这个东西有关Teletype_Model_33

它们的由来网上是这么流传的: 
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去02秒,正好可以打两个字符。要是在这02秒里面,又有新的字符传过来,那么这个字符将丢失。 
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。 
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。 
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。 
- Unix系统里,每行结尾只有“<换行>”,即“\n”; 
- Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”; 
- Mac系统里,每行结尾是“<回车>”。

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

从上面的文字中可以看出,实际上换行的功能本应该是由\n\r共同来完成的,后来在计算机中不同的系统出现了不同的规定。 
但是我们知道在C语言中,换行的 *** 作使用的是\n,但是上面的文字说在Windows下换行使用的是\n\r。这是不是有矛盾呢。 
实际上并没有。 
在Windows控制台下运行C语言,我们知道要换行时使用\n便能完成 *** 作。但是当要向文件输出数据时,如果我们要实现换行,在代码中我们仍然可以使用\n来进行换行的 *** 作。但是在文件实际的存储数据中,换行使用的是\n\r。

简单说一下,在C语言中,如果\r后输出其他字符的话,之前在本行开头输出的字符将会被覆盖。 
另外,从理论上讲,在Linux环境下\v\r组合也能够用于换行,但是在实际应用中并不会这样使用。

6、总结

所有转义字符和意义总结如下表:

\a    响铃(BEL)    007  

\b    退格(BS) ,将当前位置移到前一列    008  

\f    换页(FF),将当前位置移到下页开头    012  

\n    换行(LF) ,将当前位置移到下一行开头    010  

\r    回车(CR) ,将当前位置移到本行开头    013  

\t    水平制表(HT) (跳到下一个TAB位置)    009  

\v    垂直制表(VT)    011  

\ \    代表一个反斜线字符’\’    092  

\’    代表一个单引号(撇号)字符    039  

\”    代表一个双引号字符    034  

\    代表一个问号    063  

\0    空字符(NULL)    000  

\ooo    1到3位八进制数所代表的任意字符    三位八进制  

\xhh    1到2位十六进制所代表的任意字符    二位十六进制  

char s[100];
FILE fp;
strcat(strcpy(s,q),"\\yourfilenametxt");
fp=fopen(s,"w");
……
这样就在原路径字符串q(已知路径字符串指针)上下创建了一个名为yourfilenametxt的文件。

\\
就用\\\\
\本身是转义字符
比如:
#include
<stdioh>
#include
<windowsh>
void
main()
{
unsigned
int
i=0;
char
a[50]={0};
while(1)
{
sleep(1000);
file
fp=null;
sprintf(a,"c:\\\\file_%dtxt",i++);
//这里文件路径就是\\\\
最后a就是c:\\file_
fp=fopen(a,"wb+");
fclose(fp);
//printf("%s\n",a);
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12605667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存