C# 获取文件夹的绝对路径

C# 获取文件夹的绝对路径,第1张

这个文件夹 不一定会生成到最终发布目录,这个要看里面的文件是什么性质,是不是内容文件并复制到输出目录。

1 SystemDiagnosticsProcessGetCurrentProcess()MainModuleFileName

获取模块的完整路径。

2 SystemEnvironmentCurrentDirectory

获取和设置当前目录(该进程从中启动的目录)的完全限定目录。

3 SystemIODirectoryGetCurrentDirectory()

获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:\>

一、头文件file1h中放了一个函数申明语句。源文件中放了函数。

二、根据头文件include语句解析字符串获取头文件名,与头文件默认路径(常量)组成文件路径。同字符串的匹配找到在语句在源文件的位置,并读取头文件内容替换到源文件对应位置。

三、合并后的内容,我是写入新的文件中,如你想要覆盖同文件,自行修改路径常量。

#include <stdioh>

#include <malloch>

#include <stringh>

#define NN "C:\\newFilec"//合并后的文件完整路径

#define HPH "C:\\"//头文件的默认路径

int getFSize(char Path);//获取文件字节数,参数文件路径

char readHFile(char hPath);//获取头文件内容

char checkCFile(char cPath,char hcon);// 检查源文件,找到对应includ语句,替换成对应头文件内容,并保存到新的文件中

int findStr(char str1,char str2);//在str1中查找str2,返回str2在str1中对应的首尾字符下标

int main()

{

  char newFile=NULL;

  newFile=checkCFile("C:\\file1c","#include\"file1h\"");

  if(newFile)

      printf("合并成功,合并后的文件内容为(路径:%s):\n%s\n",NN,newFile);

  else

      printf("合并失败,无匹配内容\n");

  free(newFile);

  return 0;

}

int getFSize(char Path)

{

  int fSize=0;

  if(!Path) return 0;

  FILE fp=NULL;

  fp=fopen(Path,"r");

  if(!fp) return 0;

  fseek(fp,0,SEEK_END);

  fSize=ftell(fp);

  fclose(fp);

  return fSize;

}

char checkCFile(char cPath,char hcom)

{

  int i=0,inx=NULL,fSize=0,hfnLen=0,hPLen=0,len=0;

  char fcon=NULL,hcon=NULL,newfcon=NULL,hPath=NULL,pb=hcom,pe=pb,hfn=NULL;

  if(!cPath || !hcom) return NULL;

  FILE fp=NULL;

  fp=fopen(cPath,"rb+");//这里不要要用r,避免下面计算大小误差

  if(!fp) return 0;

  if(!(fSize=getFSize(cPath))) return NULL;

  printf("源文件大小:%d字节\n",fSize);

  fcon=(char )malloc(sizeof(char)(fSize+1));

  if(!fcon) return 0;

  fcon[fSize]=0;

  //fseek(fp,0,SEEK_SET);

  if(fread(fcon,1,fSize,fp)!=fSize) return NULL;

  printf("源文件内容为:\n%s\n",fcon);

  if(!(inx=findStr(fcon,hcom))) return NULL;//将找到的匹配内容所在下标保存在inx指向地址

  fclose(fp);

  //----通过include语句获取头文件文件名---

  while(pb!='"')pb++;

  pb++,pe=pb;

  while(pe!='"')pe++;

  hfnLen=pe-pb;

  hfn=(char )malloc(sizeof(char)(hfnLen+1));

  if(!hfn)return NULL;

  hfn[hfnLen]=0;

  while(pb<pe)hfn[i++]=pb,pb++;

  //----------------------------------------

  hPLen=hfnLen+strlen(HPH);

  hPath=(char )malloc(sizeof(char)(hPLen+1));

  strcpy(hPath,HPH);

  strcat(hPath,hfn);

  hPath[hPLen]=0;

  hcon=readHFile(hPath);//获得头文件对应内容

  //----合并两个文件内容到新的数组,释放原数组---

  len=fSize-strlen(hcom)+strlen(hcon);

  newfcon=(char )malloc(sizeof(char)(len+1));

  if(!newfcon) return NULL;

  newfcon[0]=0;

  fcon[inx[0]]=0;

  pb=fcon;

  strcpy(newfcon,pb);

  pb=hcon;

  strcat(newfcon,pb);

  pb=&fcon[inx[1]+1];

  strcat(newfcon,pb);

  newfcon[len]=0;

  free(fcon);

  free(hcon);

  free(hfn);

  //----------------------------------------------

  //-------------写入新文件-----------------------

  fp=fopen(NN,"w");

  if(!fp) return NULL;

  fwrite(newfcon,1,strlen(newfcon),fp);

  fclose(fp);

  //---------------------------------------------

  return newfcon;

}

char readHFile(char hPath)

{

  int fSize=0;

  char hcon=NULL;

  FILE fp=NULL;

  fp=fopen(hPath,"rb+");

  if(!fp)return NULL;

  if(!(fSize=getFSize(hPath)))return NULL;

  printf("头文件大小:%d字节\n",fSize);

  hcon=(char )malloc(sizeof(char)(fSize+1));

  if(!hcon) return NULL;

  hcon[fSize]=0;

  if(fread(hcon,1,fSize,fp)!=fSize) return NULL;

  printf("头文件内容为:\n%s\n",hcon);

  fclose(fp);

  return hcon;

}

int findStr(char str1,char str2)

{

  char p0=NULL,p1=NULL;

  int i,cnt=0,len1,len2;

  static int inx[2];//str2首尾字符在str1中的对应下标

  if(!str1 || !str2) return NULL;

  inx[0]=inx[1]=0;

  len1=strlen(str1);

  len2=strlen(str2);

  for(i=0;i<len1;i++)

  {

      cnt=0,p0=&str1[i],p1=p0+len2-1;

      //每次搜索,先用p0,p1定位str2的在str1中的首尾位置,进行字符对比,再两指针向内收缩比较

      if(p0!=str2[cnt] || p1!=str2[len2-1-cnt]) continue;

      cnt++,p0++,p1--;

      while(p0<=p1)

      {

          if(p0!=str2[cnt] || p1!=str2[len2-1-cnt]) break;//只要一对字符不匹配,跳过本次对比

          cnt++,p0++,p1--;

      }

      if(p0>p1)//没有跳过说明本次完全匹配,记录首尾位置

      {

          inx[0]=i,inx[1]=i+len2-1;

          return inx;

      }

  }

  return NULL;

}

1、新建一个标准的VB EXE工程,只有一个Form,Form上有两个按钮:Command1和Command2。

2、双击Command1添加如下代码

Private Sub Command1_Click()

  Dim strFile     As String

  Dim intFile     As Integer

  Dim strData     As String

   strFile = "c:\学生成绩txt"

  intFile = FreeFile

  Open strFile For Input As intFile

  strData = StrConv(InputB(FileLen(strFile), intFile), vbUnicode)

  DebugPrint strData

  Close intFile

End Sub

3、按F8开始单步调试代码,点击Command1,进入单步调试功能,

4、多次按下F8或直接按下F5运行完成,就完成了读取文本文件内容并输出到立即窗口。

以上就是关于C# 获取文件夹的绝对路径全部的内容,包括:C# 获取文件夹的绝对路径、一道c语言编程、VB.net窗体设计中,如何读取.txt文件中的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/10138163.html

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

发表评论

登录后才能评论

评论列表(0条)

保存